[英]Are there any tips to make my Python code faster for Hackerrank?
我正在嘗試解決 Hackerrank 的編碼問題,但由於我的代碼運行時間過長而不斷遇到超時錯誤。 我知道它工作得很好,縮進不是問題,代碼根本沒有“錯誤”。 我只需要有關如何使其更有效運行的提示:
def main(n, o, q, m):
for x in m:
for y,z in enumerate(o):
x -= z
if x<=0:
print y+1
break
if x>0: print -1
o 和 m 是一個整數列表,通過從 m 中減去 o 的值進行循環,直到 m 小於 0,循環完成並且 m 仍然不小於 0 它將打印 -1。 最終目標是從 o 中找出哪個 int 結束 m。
您正在對m
每個循環使用o
執行減法。
為了提高性能,您需要少循環m
或循環o
少。
循環o
less 的一種方法是預先計算所有部分和。
x
從o
減去值。 也許您只會減去一個數字、兩個數字或一千個數字。 誰知道? 您將對m
每個循環執行此操作。
例如,如果x
是 10,而o
是[2, 4, 6, 8]
,則第三項將是循環結束的項,第三項是12
,即2
、 4
和6
的總和。
建立部分和的列表意味着加法只需要進行一次。
itertools.accumulate
可以為您做到這一點。
如果o
值可以是正數或負數,那么您需要進行線性搜索,因為部分總和不會按升序排列。 (也許你可以使用一個聰明的數據結構,但我不知道。)
但是,如果o
值都是正的,您可以對部分總和進行二分搜索。
請參閱Python binary search-like function 的這個答案,以在排序列表中找到大於特定值的第一個數字
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.