當有不止一種解決方案時的一些說明,例如。當 n = 5 m = 10 時,2,3,5 和 1,4,5 都有效。第二個是正確的解決方案,因為它具有更大的數字
我已經撰寫了執行此操作的代碼,但我無法讓它運行得足夠快
編輯:特別是我需要它在 5 秒內運行,并且 n = 86879 和 m = 3131840392 運行速度不夠快
n, m = map(int,input().split())
soln = []
for i in range(n,0,-1):
if(sum(soln) i <= m):
soln.append(i)
soln.reverse()
print(len(soln))
print(soln[0],end="")
for i in range(1,len(soln)):
print("",soln[i],end = "")
print("")
uj5u.com熱心網友回復:
您實際上是在正確的軌道上:只需總結n n-1 n-2 ...直到總和達到m. 唯一的問題是sum,這使您的演算法為 O(n2)。如果您只跟蹤第二個變數中的運行總和,它是 O(n) 并且要快得多。此外,一旦下一個元素不再“適合”,您可以添加剩余部分并從回圈中中斷。
n = 86879
m = 3131840392
soln = []
res = 0
for i in range(n, 0, -1):
if res i <= m:
soln.append(i)
res = i
elif res i > m:
soln.append(m - res)
break
print(soln)
print(len(soln))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/514864.html
標籤:Python算法
