一,問題描述
二,問題分析
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;
}
};