链接
牛客:连续子数组的最大和
LeetCode:剑指 Offer 42. 连续子数组的最大和
53. 最大子序和
思路
比较简单的一道题目,利用动态规划的思想
我们设置两个参数,一个是以当前结点为末尾的最大和 last,另一个是真正的最大值 max。
当 last 小于 0 的时候 说明之前和累加是负的,没必要添加,last 为 0,从下一位重新开始相加。
代码
牛客:
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
int max = array[0];
int last = array[0];
for (int i = 1; i < array.length; i++) {
int curDp = last > 0 ? last + array[i] : array[i];
last = curDp;
max = Math.max(curDp, max);
}
return max;
}
}
LeetCode:
class Solution {
public int maxSubArray(int[] nums) {
int max = nums[0];
int last = nums[0];
for (int i = 1; i < nums.length; i++) {
int curDp = last > 0 ? last + nums[i] : nums[i];
last = curDp;
max = Math.max(curDp, max);
}
return max;
}
}