leecode:動的計画法:53。最大サブシーケンス合計

タイトル
numsに整数の配列を指定し、連続するサブ配列(少なくとも1つの要素を含むサブ配列)の最大値を見つけて、最大値に戻りました。

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

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

配列の長さがnnであると仮定しますn、添え字を00としてマークします0からn− 1 n-1n1の場合、最大サブシーケンスの合計はfmaxsub f_ {maxsub}として表されます。fm a d s a b、次に次のようになります
。fmaxsub[0] f_ {maxsub [0]}fM 、D 、S及びB [ 0 ]
fmaxsub [0→1] f_ {maxsub [0 \ to1]} fM 、D 、S及びB [ 0 1 ]
fmaxsub [0→2] f_ {maxsub [0 \ to 2]} fM 、D 、S及びB [ 0 2 ]
..。
fmaxsub [0→n− 1] f_ {maxsub [0 \ to n-1]}fmは、D SB [ 0 N - 1 ]
次に、各長さの最大のサブシーケンスの合計を比較します。それだけです。
次は、異なる長さのサブシーケンスの合計の計算です。0からカウントを開始し、後者を加算して比較し、最大値を取得できます。加算が負の場合、前のサブシーケンスの合計を破棄できることを意味します(負のA +正のB <正のB)、次にカウントダウンを続けます。最後に、最大のサブシーケンスの合計を取得できます。

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        calSum = nums[0]
        maxSum = nums[0]
        for i in range(1, len(nums)):
            if calSum > 0:
                calSum += nums[i]
                maxSum = max(calSum, maxSum)
            
            else:
                calSum = nums[i]
                maxSum = max(calSum, maxSum)
        return maxSum           

おすすめ

転載: blog.csdn.net/eight_Jessen/article/details/113573927