题目大意:求数组中的最大连续子数组的和,数组内可能有负数
分析:dp。
状态:dp[i]——以nums[i]结尾的最大连续子数组的和
初始化:dp[0]=nums[0]
结果:max{dp[i]} 在以每位结尾的子数组中选取和最大的
状态转移数组:dp[i]=max{dp[i-1]+nums[i],nums[i]}
当i位之前的和是负数时,就抛弃i位之前的数,从i开始记子数组
代码:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
vector<int> dp(nums.size());
dp[0] = nums[0];
int result = nums[0];
for (int i = 1;i < nums.size();i++) {
dp[i] = max(dp[i - 1] + nums[i], nums[i]);
result = max(result,dp[i]);
}
return result;
}
};