Python 运行时间太长
当我用代码测试它时,没有错误,但超时失败。 问题 故障率定义如下。 球员人数/舞台上的球员人数 总共N个阶段,游戏当前可由用户停止 限制 阶段数N是1或更多、500或更少的自然数。 舞台长度为1或更长,200000或更短。 包含步骤1以上和N+1以下的天然水。 每个自然数目前都受到用户的质疑。 N+1是最后阶段。 故障率仍然存在。 该阶段的成功率为零 我的代码Python 运行时间太长,python,Python,当我用代码测试它时,没有错误,但超时失败。 问题 故障率定义如下。 球员人数/舞台上的球员人数 总共N个阶段,游戏当前可由用户停止 限制 阶段数N是1或更多、500或更少的自然数。 舞台长度为1或更长,200000或更短。 包含步骤1以上和N+1以下的天然水。 每个自然数目前都受到用户的质疑。 N+1是最后阶段。 故障率仍然存在。 该阶段的成功率为零 我的代码 def solution(N, stages): fail = [] for i in range(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
是一个列表
。在列表上重复调用count
具有非常高的复杂性,特别是在循环中这样做时
您可以使用缓存或更简单的方法:通过对象调用替换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)
时间访问字典。非常感谢。没有解释,非常感谢您真诚的回答!!!问题解决了。