class Solution {
public:
int maxSubArray(vector<int>& nums) {
int len = nums.size(), son_sum = nums[0], ans = son_sum;
for(int i = 1; i < len; ++i){
if(son_sum < 0){
son_sum = nums[i];
}else{
son_sum += nums[i];
}
ans = max(son_sum, ans);
}
return ans;
}
};
如果子序列的和一直是大于0的,那么son_sum就一直往上加,可能乍一看有点奇怪,但是要注意,son_sum只是记录子序列的和,ans记录的才是连续子序列最大值。即如果son_sum虽然大于0但是在不断减小,并不会影响ans的值,ans始终记录的最大值。如果son_sum加上某个元素小于0了,那么这个元素及其以前的元素可以不要了,因为如果加上它们的话,只会让后边元素和减小。
此时具体写代码的时候,还要注意son_sum初始化为第一个元素,ans也是。