这是我对着名的连续和问题的修改。给定嵌套子数组的python中的数组,如何最佳地返回具有最大总和的子数组?我尝试了这个O(n)实现,它总是给我最后一个子阵列,但我不明白为什么。
def maxsublist(arr):
curr = sum(arr[0])
ind = 0
for i,j in enumerate(arr):
if sum(j)>curr:
ind = i
return arr[ind]
maxsublist([[1,2],[4,5],[5,96,1],[1,2,3]])
返回[1,2,3]。
***注意:我有一个更好的版本使用Python的排序功能,但这有点像作弊。
def maxsublist2(arr):
sortedlists = sorted(arr, key= lambda x: sum(i for i in x))
return sortedlists[-1]
答案 0 :(得分:3)
这根本不像连续的总和问题。这应该足够了:
max(arr, key=sum)
您的代码中的错误只是您忘记在curr
的同时更新ind
。
答案 1 :(得分:1)
当您找到一个总和大于其当前值的数组时,您需要更新curr
:
if sum(j) > curr:
ind = i
curr = sum(j)
顺便说一句,你可能想创建一些局部变量来存储sum(j)
,以免两次加总相同的东西。