最大子数组和

273 阅读1分钟

题目描述

leetcode-cn.com/problems/ma…

分析

看到区间问题,先想下前缀和

求前缀和

算法

前缀和

过程

接下来对前缀和数组进行操作

对于前缀和的每一项,怎么能找到和题目所言:最大字数组和呢?

然而很简单~

对于前缀和的每一项而言,他和前面最小的一个元素的差值可以得到最大的区间,这个值就是一个备选结果,最后通过在计算过程中不断更新结果即可求得最大字数组和

代码

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function (nums) {
  const sum = [0]
  for (let i = 1; i <= nums.length; i++) {
    sum[i] = sum[i - 1] + nums[i - 1]
  }

  let ans = Number.MIN_SAFE_INTEGER,
    pre = 0
  for (let i = 1; i < sum.length; i++) {
    const cur = sum[i] - pre
    ans = Math.max(ans, cur)
    pre = pre < sum[i] ? pre : sum[i]
  }

  return ans
}