私は整数の配列をとり、最大の合計を持つ連続したサブアレイの合計を返す再帰関数を作成しました。最大和サブアレイ - 分裂と征服
例:
入力:1~4 -9 8 1 3 3 1 -1 -4 -6 2 8 19 -10 -11
サブアレイ:8 1 3 3 1 -1 -4 - 6 2 8 19
合計:34
私のアルゴリズムは少しです。テスト入力の約2/3が間違っています。私のテストのリストはコードの下にあります。
def max_sum_subarray(arr, left, right):
maxLeftBorderSum = 0
maxRightBorderSum = 0
leftBorderSum = 0
rightBorderSum = 0
center = (left + right)/2
if left == right:
return arr[left]
maxLeftSum = min_sum_subarray(arr, left, center)
maxRightSum = min_sum_subarray(arr, center+1, right)
for i in range(center, left, -1):
leftBorderSum = leftBorderSum + arr[i]
if leftBorderSum > maxLeftBorderSum:
maxLeftBorderSum = leftBorderSum
for i in range(center+1, right):
rightBorderSum = rightBorderSum + arr[i]
if rightBorderSum > maxRightBorderSum:
maxRightBorderSum = rightBorderSum
return max(maxLeftBorderSum + maxRightBorderSum, max(maxRightSum, maxLeftSum))
一部のテスト:
1 4 -9 8 1 3 3 1 -1 -4 -6 2 8 19 -10 -11
正解= 34
私の答え= 34
2 9 8 6 5 -11 9 -11 7 5 -1 -8 -3 7 -2
正解= 30
私の答え= 28
10 -11 -1 -9 33 -45 23 24 -1 -7 -8 19
解答= 50
私の答え= 47
31 -41 59 26 -53 58 97 -93 -23 84
解答= 187
私の答え= 187
3 2 1 1 -8 1 1 2 3
正解= 7
私の答え= 4
12 99 99 -99 -27 0 0 0 -3 10
Corr電気ショック療法回答= 210
私の答え= 198
-2 1 -3 4 -1 2 1 -5 4
正解= 6
私の答えは= 6
のpython3の使用真の分裂場合