class Solution {
public:
int maxSubArray(vector<int>& nums) {
/*
dp[i] : 以nums[i]为结尾的最大连续子数组的和
dp[i] = max(dp[i - 1] + nums[i], nums[i]) ~ max(将nums[i]作为序列结束,将nums[i]作为序列起始)
*/
vector<int> dp(nums.size());
dp[0] = nums[0];
int result = dp[0];
for(int i = 1; i < nums.size(); i ++){
dp[i] = max(dp[i - 1] + nums[i], nums[i]);
if(dp[i] > result) result = dp[i];
}
return result;
}
};