我正在尝试完成一个hackerrank问题,为您提供两个数组。一个是分数列表,另一个是来自特定人的分数列表。您必须确定每个分数的那个人的排名。 例如:
scores = [100,90,80]
alice = [80,90,100]
输出应为3,2,1,因为如果您将其与数组分数中的分数进行比较,这将是alice的放置方式。如果平局,则排名相同。
我尝试仅使用一个循环并使用range命令,但这完全失败了,并且我没有得到远程接近的答案。工作解决方案是o(n ** 2)解决方案,它通过了除大型测试以外的所有测试,但该测试超时了。
def climbingLeaderboard(scores, alice):
scores = list(set(scores))
new_list = []
alcount = 1
for i in alice:
for x in scores:
if i < x:
alcount += 1
new_list.append(alcount)
alcount = 1
return new_list
任何帮助将不胜感激!
答案 0 :(得分:4)
将分数放入字典:
scores = {100:1, 90:2, 80:3}
现在,可以直接查找每个爱丽丝的乐谱以转换为所需的输出列表。
答案 1 :(得分:0)
您可以在列表理解范围内动态构建字典以在一行中实现这一目标:
result = [ d[s] for d in [{a:i+1 for i,a in enumerate(scores)}] for s in alice ]
这将为您提供O(N + M)时间的答案,其中N为len(分数),M为len(alice)