python嵌套列表:返回具有最大总和的子数组

时间:2016-05-10 20:21:04

标签: python dynamic-programming

这是我对着名的连续和问题的修改。给定嵌套子数组的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]

2 个答案:

答案 0 :(得分:3)

这根本不像连续的总和问题。这应该足够了:

max(arr, key=sum)

您的代码中的错误只是您忘记在curr的同时更新ind

答案 1 :(得分:1)

当您找到一个总和大于其当前值的数组时,您需要更新curr

if sum(j) > curr:
    ind = i
    curr = sum(j)

顺便说一句,你可能想创建一些局部变量来存储sum(j),以免两次加总相同的东西。