分析
简单题。感觉get了一点贪心的思想。
这道题就是去算 局部最大的一段,然后比较哪一段结果最大。那么问题就落到怎么计算局部最大值,可以想到如果加上一个新的数之后变成负数那就说明这一段结束了!
坑
坑在于,如果只有一个数or全都是负数的时候咋办?所以一开始result最好设置成负无穷。
var maxSubArray = function(nums) {
let result =nums[0]; //设置成-Infinity 更好。
let count =0;
for(let i=0;i<nums.length;i++){
count+=nums[i];
result =count>result?count:result;
if(count<=0){
count =0; //清零,重新开始计算局部
}
}
return result;
};
- 时间复杂度:$O(n)$
- 空间复杂度:$O(1)$