当前位置 博文首页 > 中流击水,浪遏飞舟:动态规划&&剑指 Offer 42. 连续子
dp[i]=nums[i]+(dp[i-1]>0?dp[i-1]:0);
dp[i]代表以nums[i]结尾的最大连续子数组和,dp[i-1]小于0会带来比nums[i]还要小的负收益,故dp[i-1]大于0时,dp[i]才会加上dp[i-1]。
class Solution {
public:
//动态规划
int maxSubArray(vector<int>& nums) {
int length=nums.size();
vector<int> dp(length+1,0);
int ans=nums[0];
dp[0]=nums[0];
int i=1;
while(i<length){
dp[i]=nums[i]+(dp[i-1]>0?dp[i-1]:0);
ans=max(ans,dp[i]);
i++;
}
for(int i=0;i<=length;i++){
cout<<dp[i]<<" ";
}
return ans;
}
};
class Solution {
public:
//动态规划
int maxSubArray(vector<int>& nums) {
int pre=0,ans=nums[0];
for(auto i:nums){
pre=max(pre+i,i);
ans=max(ans,pre);
cout<<ans<<" ";
}
return ans;
}
}
cs