思路
定义now为以i结尾的最大子序和,now初始化为0;
对于一个数,要么本身最大,要么加上前面的子序列使自己更大,每遍历一个数,更新一下now与ans。
代码演示
class Solution {
public:
int maxSubArray(vector& nums) {
int ans = INT_MIN, now = 0;
for (auto &x : nums) {
now = max(now + x, x);
ans = max(ans, now);
}
return ans;
}
};
int maxSubArray(int* nums, int numsSize){
int tempsum = 0, maxsum = INT_MIN;
for (int i = 0; i < numsSize; i++) {
tempsum += *(nums + i);
maxsum = tempsum > maxsum ? tempsum : maxsum;
tempsum = tempsum > 0 ? tempsum : 0;
}
return maxsum;
}