11-05 最大子序和

原题:
在这里插入图片描述
解法:
首先是最大值的定义。INT_MIN这个是默认的,INT_MAX整形的最大值;
利用贪心的思想求解这道题,其时间复杂度会控制在O(N)。**所谓贪心,就是只管当前能够得到的最大值,别的事情都不管。**因为求的是最大连续子列和,那么当前几个数字相加得到的结果比初始最大值要大的时候,那么就更新,如果前面的数字小于零,那么直接讲求得的和重置为0,重新开始即可。

有很多人提到了动态规划或者暴力的解法,可能容易想到但不容易操作,如果限定了时间,暴力在数据规模很大的时候会超时。

class Solution {
    
    
public:
    int maxSubArray(vector<int>& nums) {
    
    
        int len = nums.size();
        int ans = 0, max_ = INT_MIN;
        for(int i=0; i<len; i++)
        {
    
    
            ans += nums[i];
            max_ = max(ans, max_);
            if(ans < 0)
                ans = 0;
        }
        return max_;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_45885232/article/details/109522234