gpt4 book ai didi

python - 最大和子数组 - 分而治之

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:42:47 24 4
gpt4 key购买 nike

我创建了一个递归函数,它接受一个整数数组,并返回具有最大总和的连续子数组的总和。

例子:

输入: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

正确答案 = 210
我的答案 = 198

-2 1 -3 4 -1 2 1 -5 4

正确答案 = 6
我的答案 = 6

最佳答案

Diffchecker

#!python3
def max_sum_subarray(arr, left, right):

maxLeftBorderSum = 0
maxRightBorderSum = 0
leftBorderSum = 0
rightBorderSum = 0
center = (left + right)//2

if left == right:
if(arr[left]>0):return arr[left]
else:return 0

maxLeftSum = max_sum_subarray(arr, left, center)
maxRightSum = max_sum_subarray(arr, center+1, right)

for i in range(center, left-1, -1):
leftBorderSum = leftBorderSum + arr[i]
if leftBorderSum > maxLeftBorderSum:
maxLeftBorderSum = leftBorderSum
for i in range(center+1, right+1):
rightBorderSum = rightBorderSum + arr[i]
if rightBorderSum > maxRightBorderSum:
maxRightBorderSum = rightBorderSum

return max(maxLeftBorderSum + maxRightBorderSum,maxRightSum, maxLeftSum)
  • 基础条件错误
  • for循环范围错误
  • 调用错误的函数
  • 如果python3使用真除法

关于python - 最大和子数组 - 分而治之,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41798108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com