我应该编写一个带两个数字的函数,第一个是给定的数字,第二个是我应该找到的最大子列表的长度: 例如输入(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)
答案 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的所有子列表要好得多。希望对您有帮助!