簡體   English   中英

運行時間太長

[英]The run time is too long

當我用代碼測試它時,沒有錯誤,但它因超時而失敗。

問題

故障率定義如下。 就階段而言的玩家數量/玩家數量 階段的總數N,用戶當前可以停止游戲。 .

限制

級數N是1以上500以下的自然數。 舞台的長度為1以上200,000以下。 包含高於步驟 1 和低於 N + 1 的天然水。每個自然數目前都在受到用戶的挑戰。 N + 1 是最后階段。 故障率還是有的。 該階段的成功率為零。

我的代碼

def solution(N, stages):
    fail = []
    for i in range(1,N+1):
        no_clear = stages.count(i)
        he_stage = sum([stages.count(x) for x in range(i,N+2)])
        if no_clear==0: 
            fail.append((i,0))
        else: 
            fail.append((i,no_clear/he_stage))
    fail=sorted(fail,key=lambda x: (-x[1],x[0]))
    print(fail)
    return [fail[i][0] for i in range(N)]

我想stages是一個list list上重復調用count具有非常高的復雜性,特別是如果您在循環中執行此操作。

您可以使用緩存或更簡單的方法:用collections.Counter對象調用替換stages.count(x)

前:

def solution(N, stages):
    fail = []
    for i in range(1,N+1):
        no_clear = stages.count(i)
        he_stage = sum([stages.count(x) for x in range(i,N+2)])

后:

import collections
def solution(N, stages):
   fail = []
   stages_counter = collections.Counter(stages)
   for i in range(1,N+1):
       no_clear = stages_counter[i]
       he_stage = sum(stages_counter[x] for x in range(i,N+2))

這將大大降低您的復雜性。 元素被一勞永逸地計數。 完成后只需在O(1)時間內訪問字典。

暫無
暫無

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

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