
典型的动态规划。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;
}
该博客探讨了如何使用动态规划算法找到一串整数中的最大子序列和。通过维护一个dp数组,博主展示了如何根据前一个元素的状态决定当前元素是否应该加入到连续子序列中。最终,算法返回最大子序列和。这种方法适用于处理包含正负数的序列,能有效避免负数导致的子序列和减少的情况。
358

被折叠的 条评论
为什么被折叠?



