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;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章