最大连续子数组和肯定是以某个数组里的元素结尾的,所以只要得到以数组每个元素结尾的最大和在比较即可。如:
[-2,1,-3,4,-1,2,1,-5,4]
分别求-2,1,-3,4,-1,2,1,-5,4结尾的最大子数组和,在找出九个中最大的即为答案,怎么找每个元素结尾的子数组和呢,采用下面的式子:
定义状态: * dp[i] : 表示以 nums[i] 结尾的连续子数组的最大和 * <p> * 状态转移方程: * dp[i] = max{num[i],dp[i-1] + num[i]}
class Solution {
public:
int maxSubArray(vector<int>& nums) {
vector<int> dp;
dp.push_back(nums[0]);
for(int i=1;i<nums.size();i++){
dp.push_back(max(nums[i],dp[i-1]+nums[i]));
}
int res;
res=dp[0];
for(int j=1;j<nums.size();j++){
res=max(res,dp[j]);
}
return res;
}
};