最大子序和

參與活動得徽章 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的最大值, 最後返回其結果。
相關文章
相關標籤/搜索