タイトル:
整数配列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(左、右、中央)
結果を返す