输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
示例1:
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
1.即时处理
class Solution {
public:
int maxSubArray(vector<int>& nums) {//读入序列,并不断更新最值,如果子序列小于0了,那么对于后面的序列没有增量帮助,抛弃重新从后面计算新的子序列
int n = nums.size(), sum = 0, max = -101;
for(int i = 0; i < n; i++){
sum += nums[i];//先加在更新,要考虑序列都是负数的情况
if(sum > max) max = sum;
if(sum < 0)
sum = 0;//如果子序列和小于0,抛弃子序列并把和归0
}
return max;
}
};