我是python的新手。我有一個代碼,我循環遍歷一個列表來捕獲給定範圍 k 的最大數字總和。它工作正常,但我希望它更短/最佳。“k”可能會有所不同
numb = [100,33,22,200,333,1000,22]
m=0
k=2
sum1=0
temp=[]
for j in range(len(numb)-(k-1)):
for i in range(m,k):
temp.append(numb[i])
if sum1 < sum(temp):
sum1 = sum(temp)
temp=[]
m+=1
k+=1
print(sum1)
答案:當 k = 3 時為 1533 答案:當 k = 2 時為 1333
您可以先將第一個k
數字相加。那是您的起始金額和您當前的最大值。然後沿著列表運行一個滑動窗口,添加下一個數字並刪除超出窗口的那個。
def sum_k(x, k):
m = s = sum(x[:k])
for i, a in enumerate(x[k:]):
b = x[i] # number to remove
s += a - b
m = max(m, s)
return m
numb = [100, 33, 22, 200, 333, 1000, 22]
print(sum_k(numb, 2), sum_k(numb, 3))
這在線性時間內運行,這是最佳的,因為您至少需要查看輸入中的每個元素。
i
循環中的索引 ,運行從零到n-k-1
,因此雖然我們枚舉了x[k:]
我們選擇的索引來自x[0:]
,所以當我們選擇時,b
我們正在選擇超出窗口的數字。同時,a
是進來的新號碼。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句