当我使用代码对其进行测试时,没有错误,但是由于超时而失败。
问题
故障率定义如下。 玩家数/就舞台而言的玩家数 阶段总数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)]
答案 0 :(得分:2)
我认为stages
是list
。在count
上反复调用list
具有很高的复杂性,特别是如果您是循环执行的话。
您可以使用缓存或更简单的方法:将stages.count(x)
替换为collections.Counter
对象调用
之前:
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)
时间访问字典即可。