【发布时间】:2019-11-23 07:22:34
【问题描述】:
我试图从给定的子数组中找到包含最大和元素的子数组,而不是任何其他子数组。
下面的函数有参数作为输入a,需要返回输出。可以有多个子数组,因为它们的最大和可以相等。代码似乎没有按预期工作。
def max_sum_subarray(a):
N, sub_sum, max_sum, subArrays = len(a), 0, 0, {}
p,q=0,0 #starting and ending indices of a max sub arr
for i in range(N):
q=i
sub_sum+=a[i]
if(a[i]<0):
q-=1
if(sub_sum>=max_sum):
if(sub_sum>max_sum):
subArrays.clear()
subArrays[sub_sum]=[(p,q)]
else:
subArrays[sub_sum].append((p,q))
sub_sum=0
p=i+1
if(sub_sum>=max_sum):
if(sub_sum>max_sum):
subArrays.clear()
subArrays[sub_sum]=[(p,q)]
else:
subArrays[sub_sum].append((p,q))
return(subArrays[p:q+1])
当我试图运行输入时
a=[ 1, 2, 5, -7, 2, 5 ]
预期的输出是[1, 2, 5],但它却给出了[2, 5]。任何人都可以在python中发布解决方案吗?
【问题讨论】:
-
介意解释一下你实现的算法吗?
-
subArrays 是一个字典,在运行您的代码时,我在
return行上得到TypeError: unhashable type: 'slice'... -
方法是,从第一个索引开始,不断的相加,直到找到一个负元素,从现在开始从零开始相加,同时也保持最大的和。在这里,我创建了一个字典更新键,作为迄今为止的最大总和和迄今为止所需的子数组的开始和结束索引。