连续子数组的最大和
描述
给一个数组,返回它的最大连续子序列的和,例如 {6,-3,-2,7,-15,1,2,2},其连续子数组的最大和为8(从第0个开始,到第3个为止)。
代码 (Java)
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
if (array == null || array.length == 0)
return 0;
int curSum = array[0];
int max = array[0];
for (int i = 1; i < array.length; ++i) {
if (curSum < 0)
curSum = array[i]; // 原来组的和小于0
else
curSum += array[i];
if (curSum > max)
max = curSum;
}
return max;
}
}
思路
- 本题是动态规划的思路,直观上理解,遍历一遍数组,当遍历到某个数的时候,有两种情况,要么将其加入原来的组,要么从自己开始一个新的组(原来组的和小于0),看看两者谁的和比较大,然后再将其中较大者与全局最大值比较即可。