91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LeetCode如何求連續子數組的最大和

發布時間:2021-12-15 13:55:48 來源:億速云 閱讀:166 作者:小新 欄目:大數據

這篇文章主要介紹LeetCode如何求連續子數組的最大和,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!


題目描述

輸入一個整型數組,數組里有正數也有負數。數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值。

要求時間復雜度為 O(n)。

  • 1 <= arr.length <= 10^5
  • -100 <= arr[i] <= 100
             

題目樣例

             

示例

  • 輸入: nums = [-2,1,-3,4,-1,2,1,-5,4]
  • 輸出: 6
  • 解釋: 連續子數組 [4,-1,2,1] 的和最大,為 6。
             

題目思考

  1. 如何記錄最大和?
  2. 可以不使用額外空間嗎?
             

解決方案

             

思路

  • 題目要求復雜度 O(N), 那么我們就不能使用暴力兩重循環求當前前綴和的方法了, 那樣的復雜度是 O(N^2)
  • 那如何做到一次遍歷就計算出結果呢?
  • 假設當前以 i 結尾的最大和是 sm, 那么到 i+1 的時候, 以它結尾的最大和可以有兩種選擇:
    • 在 sm 的基礎上加上 i+1 的值
    • 也可以另起爐灶, 從 i+1 開始計算 (對應的是                  sm < 0 的情況)
  • 也即 i+1 結尾的最大和就是                 max(sm+arr[i+1], arr[i+1])
  • 它就是新的 sm 值, 這樣就不需要額外的空間
  • 而最終的結果自然就是                 max(以各個下標結尾的最大和), 可以在遍歷的時候順帶一起判斷
  • 以上就是典型的動態規劃的思想, 利用前面的計算結果來推導出當前的結果
  • 下面的代碼對必要步驟有詳細的解釋, 方便大家理解
             

復雜度

  • 時間復雜度                 O(N)
    • 只需要遍歷整個數組一遍
  • 空間復雜度                 O(1)
    • 不需要額外空間
             

代碼

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        # 初始化最終結果為負無窮, 因為可能數組全部都是負數
        res = -float('inf')
        # 初始化和為0
        sm = 0
        for x in nums:
            # 計算當前結尾的最大值
            sm = max(sm + x, x)
            # 更新最終結果為當前最大的最大值
            res = max(res, sm)
        return res
                           

以上是“LeetCode如何求連續子數組的最大和”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

盖州市| 孟村| 清镇市| 罗源县| 通化市| 南汇区| 安康市| 铜山县| 开原市| 金阳县| 突泉县| 余庆县| 沧源| 上饶市| 绵阳市| 长子县| 汝州市| 桃园市| 固镇县| 通许县| 许昌市| 潜江市| 定安县| 昌乐县| 保康县| 鸡东县| 辽宁省| 舟山市| 滦南县| 托克逊县| 凯里市| 双桥区| 佳木斯市| 隆化县| 蒙山县| 山西省| 长顺县| 晋中市| 贵港市| 青河县| 抚远县|