image.png

分析

简单题。感觉get了一点贪心的思想。
这道题就是去算 局部最大的一段,然后比较哪一段结果最大。那么问题就落到怎么计算局部最大值,可以想到如果加上一个新的数之后变成负数那就说明这一段结束了!

坑在于,如果只有一个数or全都是负数的时候咋办?所以一开始result最好设置成负无穷。

  1. var maxSubArray = function(nums) {
  2. let result =nums[0]; //设置成-Infinity 更好。
  3. let count =0;
  4. for(let i=0;i<nums.length;i++){
  5. count+=nums[i];
  6. result =count>result?count:result;
  7. if(count<=0){
  8. count =0; //清零,重新开始计算局部
  9. }
  10. }
  11. return result;
  12. };
  • 时间复杂度:$O(n)$
  • 空间复杂度:$O(1)$