最大子数组和

最大子数组和

https://leetcode.cn/problems/maximum-subarray/description/

图 0

思路

贪心的思路是,如果+nums[i]后子数组和为负数,那么以nums[i+1]为起始点进行遍历

图 1

卡哥说初始result要是计算机能表示的最小的整数,刚开始我不理解。现总结这样做的目的。

首先我们有两个变量result和count,result负责保存最终的结果,count保存遍历过程中子数组的和

如果数组中有正整数,那么其实没必要result为最小整数。但我们不能保证数组中一定有正整数。 想一个极端的例子,数组中全是负数的情况

在遍历到第1个负数的时候,result就被赋值为当前这个负数,此时count为负数,那么放弃这个起点,以第2个数为起点。如果第二个数大于第一个数,那么result被赋值为第2个负数。以此类推,result会是数组中最大的负数

求解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var maxSubArray = function(nums) {
//是为了解决数组中全是负数的情况。
result = Number.MIN_SAFE_INTEGER
sum = 0
for(let i=0;i<nums.length;i++){
sum += nums[i]
if(sum>result){
result = sum
}
if(sum<0){
sum = 0
}
}
return result
};