53. Maximum Subarray

98 阅读1分钟

题目描述

leetcode-cn.com/problems/ma…

分析

看到区间,想到前缀和

实际上是要找一个最大的区间

算法

前缀和

过程

求前缀和数组

遍历前缀和数组 ,维护一个最小值,

计算最大结果,查看 当前遍历的值 - 维护的最小值 差值是否比记录的结果大,如果是的话,说明结果需要更新

如果当前遍历到的元素小于这个维护的最小值,进行一次更新

代码

/**
 * @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
};