典型的动态规划。dp[n]代表以当前元素为截止点的连续子序列的最大和,如果dp[n-1]>0,dp[n]=dp[n]+dp[n-1],因为当前数字加上一个正数一定会变大;如果dp[n-1]<0,则从dp[n]重新开始再不停加,因为当前数字加上一个负数一定会变小。使用一个变量max记录最大的dp值返回即可。
public int FindGreatestSumOfSubArray(int[] array) {
if (array == null || array.length == 0) {
return -1;
}
int max= array[0];
for (int i = 1;i<array.length;i++) {
array[i] += array[i-1]>0?array[i-1]:0;
max = Math.max(max,array[i]);
}
return max;
}