如何在python中加速这个算法

2024-04-24 05:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

问题陈述是:

得分最高的玩家在排行榜上排名第1位。 得分相等的玩家获得相同的排名,下一个玩家获得紧随其后的排名。 例如,四名选手的得分分别为100分、90分、90分、80分和80分。这些球员将有等级1,2,2和3,分别。你知道吗

使用这种排名方法,需要根据球员在比赛中的得分计算排名,球员的得分作为输入(“得分”列表)。第二,一个特定的玩家'爱丽丝'的分数是提供的,对于她玩的每一个游戏,需要计算她在排行榜上的位置。你知道吗

假设在排行榜上有6个玩家得分[100,100,50,40,40,20,10]。爱丽丝打了第一场比赛,得了5分,排名第六。下一场比赛她得了25分,现在排名第四。接下来她得到50分,在接下来的比赛中,这次她的排名是2。你知道吗

#!/bin/python3
import sys
n = int(input().strip())
scores = [int(scores_temp) for scores_temp in input().strip().split(' ')]
m = int(input().strip())
alice = [int(alice_temp) for alice_temp in input().strip().split(' ')]
# your code goes here
for _ in alice:
    scores.append(_)
    print(list(sorted(set(scores),reverse=True)).index(_)+1)

此代码适用于范围在200~500之间的输入。但是如果它进入非常高的输入,比如10*9,代码就会因为超时而终止。我想知道如何即兴编写这段代码,使它运行得更快

编辑

n = int(input().strip())
scores = sorted(set([int(scores_temp) for scores_temp in input().strip().split(' ')]),reverse=True)
m = int(input().strip())

alice=[int(alice_temp) for alice_temp in input().split(' ')]        
for a in alice:
    rank=1
    for _ in scores:
        if(a<_):
            rank=rank+1
        else:
            #print(rank)
            break
    print(rank)   

进行了此更改,但仍在点击“由于超时而终止”,请建议需要修改的内容


Tags: 代码inforinput玩家tempintsplit
1条回答
网友
1楼 · 发布于 2024-04-24 05:28:11

没有必要把爱丽丝的分数附加到scores。首先确保scores从高到低排序。你知道吗

然后对爱丽丝的每一个分数,计算她的排名如下:

rank = 1开始,遍历scores列表。每当你看到的分数小于上一个分数时,给rank加1,当你看到的分数等于或小于Alice的分数时,立即返回rank的值。你知道吗

编辑

这个答案假设只有每个玩家的最高分数是相关的。你知道吗

相关问题 更多 >