53. 最大子数组和
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int numsLength = nums.size();
// dp[i] 表示:以 nums[i] 结尾的连续子数组的最大和
vector<int> dp(numsLength, 0);
dp[0] = nums[0];
for(int i = 1; i < numsLength; i++){
// 如果 dp[i - 1] > 0,就可以把 nums[i] 直接接在 dp[i - 1] 表示的那个数组的后面,得到和更大的连续子数组;
if(dp[i - 1] > 0) {
dp[i] = dp[i - 1] + nums[i];
}
// 如果 dp[i - 1] <= 0,那么 nums[i] 加上前面的数 dp[i - 1] 以后值不会变大。于是 dp[i] 重新开头,此时单独的一个 nums[i] 的值,就是 dp[i]。
else{
dp[i] = nums[i];
}
}
// dp[0]、dp[1]、……、dp[n - 1]中取最大值
int result = dp[0];
for(int i = 1; i < numsLength; i++){
result = max(result, dp[i]);
}
return result;
}
};