`
zeyuphoenix
  • 浏览: 57923 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

收集面试题(十)(取得最大子数组)

阅读更多
给定一个数组,当中有正负数,求当中的一段“子数组”(即任意长度,连续的数字),使得这个“子数组”的和是所有“子数组”和中最大的,
如给定的数组为12, -8, 5, 66, -21, 0 ,35, -44,7,则最大的和的子数组为{12, -8, 5, 66, -21, 0 ,35},最大的和为89.
	package arraytest;

public class GetMaxArray {

	// 复杂度为o(n^2)
	public void findMax(int s[]) {
		int add[] = new int[100];
		int k = s[0];
		int b = 0;// 标记开始位置
		int p = 0;// 标记结束位置
		int i;
		int j;

		for (i = 0; i <= s.length; i++)// 整体循环
		{
			for (j = i; j < s.length; j++)// 子数组循环
			{
				add[i] += s[j];
				if (add[i] > k) {
					k = add[i];
					b = i;// 获得开始位置下标
					p = j;// 获得结束位置下标
				}
			}
		}
		System.out.print("max sub array:");
		System.out.print("{");
		for (i = b; i <= p; i++) {
			System.out.print(s[i] + " ");
		}
		System.out.println("}");
		System.out.println("sum:" + k);
	}

	// 复杂度为o(n)
	public int findMax(int a[], int size) {
		int i, max = 0, temp_sum = 0;
		for (i = 0; i < size; i++) {
			temp_sum += a[i];
			if (temp_sum > max)
				max = temp_sum;
			else if (temp_sum < 0)
				temp_sum = 0;
		}
		System.out.print("sum:" + max);
		return max;
	}

	public static void main(String[] args) {
		int s[] =
		// { 101, -100, 100, 100, 999, -222 - 100, 100 };
		{ 12, -8, 5, 66, -21, 0, 35, -44, 7 };
		GetMaxArray test = new GetMaxArray();
		test.findMax(s);
		test.findMax(s, s.length);
	}

}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    最大子数组和

    最大子数组和问题是一种常见的编程面试题目,同时也是算法课程中的经典案例。题目要求从一个整数数组中找到连续子数组的一部分,使得这部分子数组的和最大。值得注意的是,数组中的元素可以包括正数和负数。 #### ...

    最大子数组乘积

    在编程领域,"最大子数组乘积"是一个经典的问题,主要涉及到数组处理和动态规划算法。这个问题要求我们从一个整数数组中找到连续子数组,使得这个子数组的所有元素乘积最大。这个问题不仅出现在面试中,也是数据分析...

    G-MIng#JAVA2019#面试题66. 构建乘积数组1

    面试题66. 构建乘积数组题目链接面试题66. 构建乘积数组题目描述给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B

    vfmh#JAVA2020#面试题56 - I. 数组中数字出现的次数1

    面试题56 - I. 数组中数字出现的次数题目链接面试题56 - I. 数组中数字出现的次数题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。传出

    Visual Basic中带一次删除操作的最大子数组和算法实现

    使用场景及目标:对于参加编程竞赛或是进行编码技术面试的人士来说,理解和熟练此题及其解决方法能够提高他们应对涉及数组和动态规划问题的能力,提升编程竞争力。 其他说明:虽然文中针对Visual Basic给出实现细节...

    【剑指offer】面试题4-二维数组中的查找-完整的可执行代码(Java)

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题...

    LeetCode精选TOP面试题108.将有序数组转换为二叉搜索树

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 将有序数组转换为二叉搜索树的结果肯定是不唯一的,因为存在...

    Java - 数组面试题 - 个人整理

    数组 - 需要参加面试的人

    python-leetcode面试题解之第53题最大子数组和-题解.zip

    【Python LeetCode 面试题解 - 第53题 最大子数组和】 在LeetCode平台上,第53题被称为“Maximum Subarray”,这是一道经典的动态规划问题,旨在找到一个数组中的连续子数组,使得该子数组的和最大。在Python编程中...

    常见数组面试题

    ### 常见数组面试题解析 #### 一、数组求和 **题目描述:** 使用递归方式实现数组求和,并且要求整个函数只使用一行代码。 **解答:** ```cpp int sum(int* a, int n) { return n == 0 ? 0 : sum(a, n - 1) + a...

    wyh317#JZoffer#面试题4:二维数组中的查找1

    测试用例特殊输入测试(空指针)二维数组包括要查找的数字(target为数组最大值、target为数组最小值、target位于数组最大值和最小值之间)二维数组不包

    JavaScript 数组面试题

    JavaScript 数组面试题

    数组指针和指针数组的区别

    数组指针和指针数组的区别

    【剑指offer】面试题66-构建乘积数组-完整的可执行代码(Java)

    [构建乘积数组]完整的可执行代码(Java) 解题思路见文章:https://blog.csdn.net/flower_48237/article/details/104065815 题目描述: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B...

    java基础面试题数字在排序数组中出现的次数

    java基础面试题数字在排序数组中出现的次数本资源系百度网盘分享地址

    面试题总结:数组和链表的区别 数组和链表.pdf

    数组和链表的区别 在计算机科学中,数组和链表是两种基本的数据结构,它们都广泛应用于软件开发和算法设计中。然而,数组和链表有着根本的区别,这些区别决定了它们在不同的场景下的应用。 数组 数组是一种连续...

    LeetCode 面试题56 – I. 数组中数字出现的次数 | Python

    文章目录面试题56 – I. 数组中数字出现的次数题目解题思路代码实现实现结果 面试题56 – I. 数组中数字出现的次数 题目 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一...

    wind0926#JAVA2020#面试题21. 调整数组顺序使奇数位于偶数前面1

    面试题21. 调整数组顺序使奇数位于偶数前面题目链接面试题21. 调整数组顺序使奇数位于偶数前面题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,

    腾讯面试题解析.pdf

    在数据结构和算法面试题部分,涵盖了数组、链表、栈、队列、树、图等多种数据结构的知识点,以及排序、搜索、递归、动态规划等算法知识点。 Java 面试题 在 Java 面试题部分,涵盖了 Java 基础知识点,包括 Java ...

Global site tag (gtag.js) - Google Analytics