我的代码显示运行时错误

时间:2018-05-21 11:07:04

标签: python python-3.x algorithm

我正在尝试解决这个HackerRank问题。

https://www.hackerrank.com/challenges/climbing-the-leaderboard/problem

这个问题的一般想法是,当Alice进入排行榜时,我需要在每场比赛后输出她的排名。

我的代码正在针对除TestCase 6,7,8,9之外的所有测试,这是因为它获得了RunTime Error。

这是我的代码:

from itertools import count
#Hackerrank Code
scores_count = int(input())
scores = list(map(int, input().rstrip().split()))
alice_count = int(input())
alice = list(map(int, input().rstrip().split()))
#My Code Starts from here
main_list = [sorted(scores+[i], reverse=True) for i in alice]
track = []
for sub in main_list:
    seen = {}
    c = count()
    next(c)
    ss = []
    for j in sub:
        try:
            ind = seen[j]
        except KeyError:
            ind = seen[j] = next(c)
        ss.append((j, ind))
    track.append(ss)
flicker = []
for x in track:
    gatter = dict(x)
    flicker.append(gatter)
trackstar = [d.get(key) for key, d in zip(alice, flicker)]
for m in trackstar:
    print(m)

我想知道我的代码中显示运行时错误的缺陷在哪里,我该如何修复它。我使用的是Python 3.x

1 个答案:

答案 0 :(得分:1)

为避免因运行时间过长导致的超时,请使用一组分数,而不是列表:

如果你10**8 ppl坐在排名3上并得到相同的分数,你会得到很长的名单 - 完全不需要,因为他们的其他10**8-1 ppl坐在3级也没有贡献根本不是Alices排名 - 但是他们进行了所有排序和迭代, 更长

一个非常基本的解决方案是:

input() # discard
scores = map(int,input().strip().split(' '))
input() # discard
alice = list(map(int,input().strip().split(' ')))

leaderboard = sorted(set(scores), reverse = True) # discard any identical scores before 
# sorting, sort by reverse so lowest score is last item in scores
l = len(leaderboard) # start with lowest score

# assumes alice never gets worse after playing games
for a in alice:
    while (l > 0) and (a >= leaderboard[l-1]):
        l -= 1 # climb the board
    print (l+1)

这只会从总分数列表中的最后得分开始,而不是从每个Alices部分得分的最低分数开始。