题目描述
分析
看到区间,想到前缀和
实际上是要找一个最大的区间
算法
前缀和
过程
求前缀和数组
遍历前缀和数组 ,维护一个最小值,
计算最大结果,查看 当前遍历的值 - 维护的最小值 差值是否比记录的结果大,如果是的话,说明结果需要更新
如果当前遍历到的元素小于这个维护的最小值,进行一次更新
代码
/**
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function(nums) {
const sum = [0]
const n = nums.length
for (let i = 1 ; i <= n; i++) {
sum[i] = sum[i - 1] + nums[i - 1]
}
let pre = Number.MAX_SAFE_INTEGER, ans = Number.MIN_SAFE_INTEGER
for (let i = 0; i < sum.length; i++) {
const cur = sum[i] - pre
ans = Math.max(ans, cur)
if (pre > sum[i]) pre = sum[i]
}
return ans
};