侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

LeetCode 53. 最大子数组和

Hope
2022-02-13 / 0 评论 / 0 点赞 / 632 阅读 / 596 字
温馨提示:
本文最后更新于 2022-08-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

LeetCode 53. 最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

思路:

状态表示为f[i] 以nums[i] 结尾的子数组和 属性为Max 
集合划分为 长度是否大于1 如果不大于1就是nums[i]本身
否则是 f[i-1] + nums[i]

f[i] =max(f[i], f[i-1] + num[i]) 

代码:

class Solution {
public:
    vector<int> f;
    const int Inf=-(1e4+10);
    int maxSubArray(vector<int>& nums) {
        int n=nums.size();
        //f=vector<int>(n);
        int res=Inf;
        //O(N^2) 过不了
        //由于f[i]=max(f[i],f[i-1]+nums[i])
        //所以可以开一个新的变量存上一个的f[i-1] 达到O(n)级别
        for(int i=0,last=0;i<n;i++){
            //如果上一个last是负的 那其实应该重新开一个序列 开始的是nums[i]
            //last=nums[i]+max(last,0);
            last=max(nums[i],nums[i] + last);
            //last=f[i];
            res=max(res,last);
        }
        return res;

    }
};
0

评论区