如果a[i]是负的,那么它不可能代表最优序列的起点,因为任何包含a[i]作为起点的子序列都可以通过a[i+1]作起点而得到改进。任何负的子序列不可能是最优子序列的前缀。
时间复杂度O(N)的解法:
public int FindGreatestSumOfSubArray(int[] array) {
if (array == null || array.length == 0) {
return Integer.MIN_VALUE;
}
int currSum = Integer.MIN_VALUE;
int maxSum = Integer.MIN_VALUE;
for (int i = 0; i < array.length; i++) {
currSum = (currSum < 0) ? array[i] : currSum + array[i];
if (currSum > maxSum) maxSum = currSum;
}
return maxSum;
}