题目描述
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
示例:
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
题目解答
分析数组的规律
如果累加到当前元素的结果比当前元素还小,则子数组从当前元素重新开始考虑,同时,最大值应为当前元素。
如果累加到当前元素的结果比最大值还大,则修改最大值为当前累加和。
var maxSubArray = function(nums) {
var maxValue = -Infinity;
var childArray = [];
var sumOfElement = 0;
if(nums.length<=0){
return 0;
}
for(var i=0;i<nums.length;i++){
sumOfElement+=nums[i];
if(sumOfElement<nums[i]){
childArray = [];
sumOfElement = nums[i];
}
childArray.push(nums[i]);
if(maxValue<sumOfElement){
maxValue = sumOfElement;
}
}
return maxValue;
};