Leetcode演習(Python):配列クラス:質問53:整数配列numsを指定して、合計が最大の連続サブ配列を見つけ(サブ配列には少なくとも1つの要素が含まれます)、その最大合計を返します。上級:複雑度O(n)のソリューションを実装している場合は、より複雑な分割統治ソリューションを使用してみてください。

タイトル:

整数配列numsを指定して、合計が最大の連続サブ配列を見つけ(サブ配列には少なくとも1つの要素が含まれます)、最大の合計を返します。上級:複雑度O(n)のソリューションを実装している場合は、より複雑な分割統治ソリューションを使用してみてください。

アイデア:貪欲法と分断統治

手順1:貪欲

クラスSolution:
    def maxSubArray(self、nums:List [int])-> int:
        長さ= len(nums)
        補助=数字[0]
        temp_result = nums [0]

        range(1、length)のインデックスの場合:
            補助=最大(数値[インデックス]、補助+数値[インデックス])
            temp_result = max(auxiliary、temp_result)
        
        結果= temp_result
        結果を返す
手順2:分割して征服する
公式アイデアの図:
 

 

 

クラスSolution:
    def maxSubArray(self、nums:List [int])-> int:
        長さ= len(nums)
        長さ<= 1の場合:
            nums [0]を返す
        left = self.maxSubArray(nums [0:len(nums)// 2])
        right = self.maxSubArray(nums [len(nums)// 2:len(nums)])

        middle_left = nums [len(nums)// 2-1]
        補助_1 = 0
        range(len(nums)// 2-1、-1、-1)のindex1の場合:
            auxiliary_1 + = nums [index1]
            middle_left = max(middle_left、auxiliary_1)
        
        middle_right = nums [len(nums)// 2]
        補助_2 = 0
        range(len(nums)// 2、len(nums)、1)のindex2の場合:
            auxiliary_2 + = nums [index2]
            middle_right = max(middle_right、auxiliary_2)
        
        真ん中=真ん中の左+真ん中の右

        結果= max(左、右、中央)

        結果を返す

おすすめ

転載: www.cnblogs.com/zhuozige/p/12736417.html