用vector来存储f(i-1)的状态:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int ret = nums[0];
vector<int> dp(nums.size()+1,0);
dp[0] = nums[0];
for(int i = 1;i < nums.size();i++){
dp[i] = max(dp[i-1]+nums[i],nums[i]);
ret = ret>dp[i]?ret:dp[i];
}
return ret;
}
};
不用vector,每次更新较大的pre:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int ret = nums[0];
int pre = 0;
for(auto e:nums){
//首先看和大还是该数大
//也就是f(i-1)+nums[i]和nums[i]谁大
pre = max(pre+e,e);//dp数组的值不用开数组来存储
ret = max(ret,pre);
}
return ret;
}
};