最大子序和

参与活动得徽章 juejin.cn/topic/68247…数组

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

const nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
function maxSubArray (nums) {
    let pre = 0, maxAns = nums[0];
    nums.forEach((x) => {
        pre = Math.max(pre + x, x);
        maxAns = Math.max(maxAns, pre);
    });
    return maxAns;
}
复制代码

动态规划

  1. 先假设数组的第一个元素就是最大值maxAns, 遍历时,拿maxAns和当前值x比较, 保留较大的值。
  2. 这样咱们求出来的是单项的最大值,题目须要咱们求出连续累加的最大值。
  3. 再定义一个累加变量 pre, 和当前值x比较, 保留较大的值, 更新 pre
  4. 每次累加的过程当中, 记录 pre的最大值, 最后返回其结果。
相关文章
相关标签/搜索