剑指 Offer 42. 连续子数组的最大和

题目链接:剑指 Offer 42. 连续子数组的最大和

方法:动态规划

解题思路

参考动态规划详细解析——剑指 Offer 42. 连续子数组的最大和
注意:

  1. 很多同学首先会想到同向双指针,实际上本题由于nums数组的某一个元素的下一个元素可正可负,导致同向双指针要求的单调性无法满足;
  2. 使用dp解答时,关键一部在于dp数组含义的定义,即dp[i]表示以nums[i]结尾的子数组和的最大值,这就保证了递推过程中前后dp[i]dp[i+1]可以联系起来(若选择nums[i+1]则可以与nums[i]连接起来成为新的子数组)。

代码

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

复杂度分析

时间复杂度:O(n)
空间复杂度:O(1)

posted @   lixycc  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示