53. 最大子数组和https://leetcode-cn.com/problems/maximum-subarray/comments/
局部最优:当前“
连续和
”
为负数的时候⽴刻放弃,从下⼀个元素重新计算
“
连续和
”
,因为负数加上下⼀个元素 “
连续和
”
只会越来越⼩。
全局最优:选取最⼤“
连续和
” 局部最优的情况下,并记录最⼤的“
连续和
”
,可以推出全局最优
。从代码⻆度上来讲:遍历nums
,从头开始⽤
count
累积,如果
count
⼀旦加上
nums[i]
变为负数,那么就应该从nums[i+1]
开始从
0
累积
count
了,因为已经变为负数的
count
,只会拖累总和。
public int maxSubArray(int[] nums) {
if (nums.length == 1){
return nums[0];
}
int max = 0, present = 0;
for (int i = 0; i < nums.length; i++) {
present += nums[i];
if (present > max){
max = present;
}
if (present < 0){
present = 0;
}
}
return max;
}