Skip to main content

最大子序和

题目

给定一个整数数组 nums, 找到一个具有最大和的连续子数组(子数组最少包含一个元素), 返回其最大和.

提示:
  • 1 <= nums.length <= 10⁵
  • -10⁴ <= nums[i] <= 10⁴
示例

输入: nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]

输出: 6

解释: 连续子数组 [4, -1, 2, 1] 的和最大, 为 6.

题解

  • dp[i - 1] + nums[i], 即 nums[i] 加入当前连续子序列和
  • nums[i], 即从 nums[i] 起计算当前连续子序列和
/**
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function (nums) {
const n = nums.length
const dp = new Array(n).fill(0)
dp[0] = nums[0]

let max = nums[0]
for (let i = 1; i < n; i++) {
dp[i] = Math.max(dp[i - 1] + nums[i], nums[i])
max = Math.max(max, dp[i])
}

return max
}