最大子序列和
分析
一个经典的DP,对于每一个考虑两种,第一是把之前的结果加上来,就是连上之前的。那么就是dp[i-1]+nums[i],否则就是从这个重新开始取个最大值。因为答案可能会在这中间产生,所以每次要更新答案
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int dp[20000 + 100];
if (!nums.size())return 0;
dp[0] = nums[0];
int ans = dp[0];
for (int i= 1; i < nums.size(); i++) {
dp[i] = max(nums[i], dp[i-1] + nums[i]);
ans = max(ans, dp[i]);
}
return ans;
}
};