LeetCode 53.最大子序列和

一,问题描述

二,问题分析

1.定义状态:memo[i] : 表示0...i上最大连续子序列和

2.初始状态:memo[i] = nums[i] 

3.状态转移:每多选择一个数字时,即当进来一个新的数字memo[i+1]时,判断到他前面数字子序列和memo[i]+memo[i+1]跟memo[i+1]哪个大,前者大就保留前者,后者大就说明前面连续数字加起来都不如后者一个新进来的数字大,前面数字就可以舍弃,从memo[i+1]开始,每次比较完都跟res比较一下,最后的res就是最大值。
 

三,问题解答

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        vector<int> memo(nums);
        int res = memo[0];
        for(int i=1;i<nums.size();i++){
            memo[i] = max(memo[i],memo[i]+memo[i-1]);
            res = max(res,memo[i]);
        }
        return res;
    }
};
发布了54 篇原创文章 · 获赞 14 · 访问量 3570

猜你喜欢

转载自blog.csdn.net/q2511130633/article/details/105256898
今日推荐