2021-01-03 | 53. 最大子序和

CUG-GZ發表於2021-01-03

1. 題目描述

給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。

示例:

輸入: [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6

進階:

如果你已經實現複雜度為 O(n) 的解法,嘗試使用更為精妙的分治法求解。

2. 解題思路

這裡我們使用動態規劃來解決這個問題,當前最大連續子序列和sum,結果為res:

  • 如果sum > 0,則說明 sum 對結果有增益效果,則 sum 保留並加上當前遍歷數字
  • 如果 sum <= 0,則說明 sum 對結果無增益效果,需要捨棄,則 sum 直接更新為當前遍歷數字

每次遍歷都比較res和sum的大小,將最大值賦值為res,遍歷結束後就返回結果。

複雜度分析:

  • 時間複雜度:O(n),其中n是陣列nums的長度,需要對整個陣列進行遍歷。
  • 空間複雜度:O(1)

3. 程式碼實現

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    let sum = 0, res = nums[0]
    for(let num of nums){
        sum > 0 ? sum += num : sum = num
        res = Math.max(sum, res)
    }
    return res
};

4. 提交結果

在這裡插入圖片描述

相關文章