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

 

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