簡體   English   中英

有沒有什么技巧可以讓我的 Python 代碼更快地用於 Hackerrank?

[英]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 的一種方法是預先計算所有部分和。

xo減去值。 也許您只會減去一個數字、兩個數字或一千個數字。 誰知道? 您將對m每個循環執行此操作。

例如,如果x是 10,而o[2, 4, 6, 8] ,則第三項將是循環結束的項,第三項是12 ,即246的總和。

建立部分和的列表意味着加法只需要進行一次。

itertools.accumulate可以為您做到這一點。

如果o值可以是正數或負數,那么您需要進行線性搜索,因為部分總和不會按升序排列。 (也許你可以使用一個聰明的數據結構,但我不知道。)

但是,如果o值都是正的,您可以對部分總和進行二分搜索。

請參閱Python binary search-like function 的這個答案,在排序列表中找到大於特定值的第一個數字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM