zhangdizhangdi

53.最大子数组和

题目

LeetCode 中等

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其 最大和
子数组 是数组中的一个连续部分

示例:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

输入:nums = [5,4,-1,7,8]
输出:23

题解

DP O(n) O(1)

js
function maxSubArray(nums) {
  let pre = 0,
    res = nums[0]

  nums.forEach(cur => {
    pre = Math.max(pre + cur, cur)
    res = Math.max(res, pre)

    console.log('当前值', cur, 'pre', pre, '最大', res)
  })
  return res
}

const nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
console.log('🌰', maxSubArray(nums))
执行结果
当前值 -2 pre -2 最大 -2
当前值 1 pre 1 最大 1
当前值 -3 pre -2 最大 1
当前值 4 pre 4 最大 4
当前值 -1 pre 3 最大 4
当前值 2 pre 5 最大 5
当前值 1 pre 6 最大 6
当前值 -5 pre 1 最大 6
当前值 4 pre 5 最大 6
🌰 6