一、題目描述
輸入一個整型數組,數組裏有正數也有負數。數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值。
要求時間複雜度爲O(n)。
二、示例
輸入: nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續子數組 [4,-1,2,1] 的和最大,爲 6。
三、解題思路
設置兩個變量來保存當前值和最大值,用currentnum的正負來控制子序列,當大於0 ,就加上後面的值,否則從下一個開始進行新的子序列,再將當前值與max 進行比較,若小於則不進行交換,否則進行交換。
四、代碼
/**
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function(nums) {
var currentnum = nums[0]
var maxcount = nums[0];
for(let i = 1 ; i < nums.length ; i++){
if(currentnum<0){
currentnum = nums[i]
}else{
currentnum+= nums[i]
}
if(currentnum > maxcount){
maxcount = currentnum;
}
}
return maxcount
};