53. 最大子数组和

  1. 题目链接

  2. 解题思路

    • 最大子数组问题,有两个基本的想法,以i开头的子数组结果是怎样的,求出所有的结果,最优的那个,就是答案;以i结尾的子数组结果是怎样的,求出所有的结果,最优的那个,就是答案。
    • 本题我们可以考虑,「以i结尾的结果是怎样的」,为啥?因为我们要求的是最大的累加和,我们求出了res1=「以i结尾的结果」,求i+1的结果就很方便了,如果res1为正数,则i+1的结果就是res1 + nums[i + 1],如果res1为负数,则i+1的结果就是nums[i + 1]
  3. 代码

    class Solution {
    public:
    int maxSubArray(vector<int>& nums) {
    int n = nums.size();
    int pre = nums[0]; // 0结尾的结果
    int ans = pre;
    for (int i = 1; i < n; ++i) { // 我们现在求以i结尾的结果是多少
    if (pre > 0) { // 如果前面的累加和大于0 则加上
    pre += nums[i];
    } else { // 否则不加
    pre = nums[i];
    }
    ans = max(ans, pre); // 更新结果
    }
    return ans;
    }
    };
posted @   ouyangxx  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示