[英]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.