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