【LeetCode】53. 最大子数组和
题目链接
思路分析——贪⼼解法
贪⼼贪的是哪⾥呢?
如果 -2 1 在⼀起,计算起点的时候,⼀定是从1开始计算,因为负数只会拉低总和,这就是贪⼼贪的地⽅!
局部最优:当前“连续和”为负数的时候⽴刻放弃,从下⼀个元素重新计算“连续和”,因为负数加上下⼀个元素 “连续和”只会越来越⼩。
全局最优:选取最⼤“连续和”局部最优的情况下,并记录最⼤的“连续和”,可以推出全局最优。
从代码⻆度上来讲:遍历nums,从头开始⽤count累积,如果count⼀旦加上nums[i]变为负数,那么就应该从nums[i+1]开始从0累积count了,因为已经变为负数的count,只会拖累总和。这相当于是暴⼒解法中的不断调整最⼤⼦序和区间的起始位置。
代码如下
点击查看代码
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int result = INT32_MIN;
int count = 0;
for(int i = 0;i < nums.size();i++){
count += nums[i];
if(count > result){
result = count;
}
if(count <= 0){
count = 0;
}
}
return result;
}
};