最大部分配列合計 (Python)

整数配列 nums を指定して、最大合計を持つ連続部分配列 (部分配列には少なくとも 1 つの要素が含まれます) を見つけて、その最大合計を返します。サブ配列は配列の連続した部分です。
例 1:

入力: nums = [-2,1,-3,4,-1,2,1,-5,4]
出力: 6
説明: 連続する部分配列の合計 [4,-1,2,1] が最大です、6です。

例 2:

入力: nums = [1]
出力: 1

例 3:

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

動的プログラミング:

1. dp 配列 (dp テーブル) の添字の意味
    dp[i]: 添字 i の前の最大の連続部分列の合計が dp[i] です。
2. 再帰式
    dp[i] は 2 つの方向でのみ推定できます:
    dp[i - 1] + nums[i]、つまり、nums[i] は現在の連続サブシーケンスと
    nums[i] を結合します。最初から開始する 現在の連続サブシーケンスの合計の計算は
    最大である必要があるため、 dp[i] = max(dp[i - 1] + nums[i], nums[i]); 3. dp の初期
化配列は
    再帰式からわかります。dp[i] は dp[i - 1] に依存する状態であり、dp[0] は再帰式の基礎です。dp[i] の定義によれば、dp[0] = nums[0] となります。
4.
    走査順序再帰式では、dp[i] は dp[i - 1] の状態に依存し、前から後ろに走査する必要があります。

def maxSubArray(nums):
    dp = [0] * len(nums)
    dp[0] = nums[0]
    for i in range(1,len(nums)):
        dp[i] = max(dp[i-1] + nums[i],nums[i])
    return max(dp)


if __name__ == "__main__":
    nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
    print(maxSubArray(nums))
def maxSubArray(nums):
    pre,result = 0, nums[0]
    for el in nums:
        pre = max(pre + el,el)  
        result = max(result,pre)
    return  result

おすすめ

転載: blog.csdn.net/qq_43325582/article/details/122836363