自学内容网 自学内容网

力扣 53. 最大子数组和

🔗 https://leetcode.cn/problems/maximum-subarray

题目

  • 给定一个数组,有正数,有复数,返回子序列之和的最大值

思路

  • 这个题目《编程珠玑》讲过,思路从普速的模拟,到 presum 优化,到代码很容易写错的分治,到最后的扫描,这过程也是历经了好几年
  • 扫描的思路就是,如果前面子序列之和大于零,就保留,如果小于零,就不要前面的子序列,重新开始统计,记录这过程中的最大值

代码

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

原文地址:https://blog.csdn.net/weixin_42383726/article/details/143993147

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!