具有特定长度的子列表的最大总和

时间:2014-03-17 20:01:53

标签: python list max sublist

我应该编写一个带两个数字的函数,第一个是给定的数字,第二个是我应该找到的最大子列表的长度: 例如输入(1234,2) 输出将是7

这是我的代码到目前为止,它只计算整个数字的总和:

def altsum_digits(n,d):
b=str(n)
c=[]
for digit in b:
    c.append(int(digit))

maxthere=0
realmax=0
for a in str(d):             
    for i in c:
        maxthere=max(0,(maxthere+int(i)))
        realmax=max(maxthere,realmax)
        maxthere==0
print(realmax)

6 个答案:

答案 0 :(得分:1)

通过我的质疑,这应该做你想要的:

def do(n, d):
    print sum(sorted([int(x) for x in str(n)])[-d:])

答案 1 :(得分:0)

让我们澄清一下,确保我们在同一页面上。

输入:1)数字列表li; 2)n

输出:长度为li的{​​{1}}的切片,具有最大总和。

n

答案 2 :(得分:0)

def sublists(lst, n):
    return (lst[i:i+n] for i in range(len(lst) - n + 1))

def max_sublist_sum(lst, n):
    return max(sum(sub) for sub in sublists(lst, n))

max_sublist_sum([1,2,3,4], 2)   # => 7

答案 3 :(得分:0)

这应该可以解决问题:

def altsum_digits(n, d):
    l = list(map(int, str(n)))
    m = c = sum(l[:d])
    for i in range(0, len(l)-d):
        c = c - l[i] + l[i+d]
        if c > m: m = c
    print m

altsum_digits(1234,2)
>>> 7

答案 4 :(得分:0)

我想我理解你在问什么,这是我的解决方案。我已经在您的输入以及具有不同长度的子串的其他输入上测试了它。此代码在输入中找到相邻子串的最大总和。

def sum_of_sublist(input, maxLength):
    input_array = [int(l) for l in str(input)]
    tempMax = 0
    realMax = 0
    for i in range(len(input_array) - (maxLength - 1)):
        for inc in range(0, maxLength):
            tempMax += input_array[i+inc]
        if tempMax > realMax:
            realMax = tempMax
        tempMax = 0
    print realMax


sum_of_sublist(1234, 2)

因此,对于呼叫sum_of_sublist(1234, 2)的输入,它将打印值7,因为2个连续数字的最大总和是3 + 4 = 7.同样,对于呼叫sum_of_sublist(12531, 3),程序将打印10,因为3个连续数字的最大总和是2 + 5 + 3 = 10.

答案 5 :(得分:0)

假设您得到一个数字n和一个长度k。

您要做的是首先将n变成一个数字列表,然后使用大小为k的滑动窗口,在此步骤中,您将添加下一个数字,然后将第一个数字减去该滑动窗口,并保持跟踪max_sum的值,因此您可以在最后将其返回。

函数看起来像这样

def altsum_digits(n, k):
    list_n = [int(x) for x in str(n)]
    max_sum = sum(list_n[:k])

    for i in range(k, len(list_n)):
        current_sum = current_sum + list_n[i] - list_n[i - k]
        max_sum = max(current_sum, max_sum)

    return max_sum

这是O(n)解决方案,所以它比生成大小为k的所有子列表要好得多。希望对您有帮助!