本博文引自:http://blog.youkuaiyun.com/u014458048/article/details/54971991
题目描述:
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。
解题思路
设sum[i]表示以nums[i]结尾的子数组的最大和,则sum[i]与sum[i-1]有两种关系:
1、当sum[i-1]<=0时,sum[i] = nums[i];
2、当sum[i-1] > 0时,sum[i] = sum[i-1] +nums[i]。
Java代码
public static int FindGreatestSumOfSubArray(int[] nums) {
int len = nums.length;
int[] sum = new int[len];
sum[0] = nums[0];
for(int i = 1; i < len; i++) {
if(sum[i - 1] > 0) sum[i] = sum[i - 1] + nums[i];
else if(sum[i - 1] <= 0) sum[i] = nums[i];
System.out.println(sum[i]);
}
int max = sum[0];
for(int n : sum) {
if(n > max) max = n;
}
return max;
}