【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;
    }
};
posted @ 2022-08-19 18:26  小超不挑食  阅读(18)  评论(0编辑  收藏  举报