【发布时间】:2020-02-19 03:00:38
【问题描述】:
挑战是这样的:
Alice 正在玩街机游戏,想爬到顶部 排行榜,并想跟踪她的排名。游戏使用密集 排名,所以它的排行榜是这样工作的:
得分最高的玩家在 排行榜。得分相同的玩家获得相同的排名 号码,下一个玩家收到紧随其后的 排名号。例如,排行榜上的四个玩家有 100、90、90 和 80 的高分。这些玩家将排名第一, 分别为 2、2 和 3。如果 Alice 的分数是 70、80 和 105,她 每场比赛后的排名分别为第4、第3和第1
基本上你必须在每场比赛后返回一个包含她排名的数组。我有工作代码,但它在 4 次测试中超时。这是我的代码:
def climbingLeaderboard(scores, alice)
positions = []
alice.each do |x|
scores.insert(scores.index(scores.min_by { |y| (x-y).abs }) + 1, x)
board = scores.group_by { |x| x }.sort_by { |k,v| v }.reverse
positions << board.find_index { |k| k[0] == x } + 1
end
return positions
end
我想知道我可以做些什么来优化它?
【问题讨论】:
-
我投票结束这个问题,因为它属于Code Review site。
-
提示:使用
map。 -
@tadman,这不是工作代码!如果
scores = [100, 90, 90, 80]和alice = [70, 80, 105],climbingLeaderboard(scores, alice) #=> [4, 3, 1](正确),但现在scores #=> [100, 100, 90, 89, 90, 80, 70],所以如果再次执行该方法将产生不正确的结果。
标签: ruby algorithm optimization