1. 程式人生 > >【LeetCode】506. Relative Ranks【E】【50】

【LeetCode】506. Relative Ranks【E】【50】

Given scores of N athletes, find their relative ranks and the people with the top three highest scores, who will be awarded medals: "Gold Medal", "Silver Medal" and "Bronze Medal".

Example 1:

Input: [5, 4, 3, 2, 1]
Output: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]
Explanation: The first three athletes got the top three highest scores, so they got "Gold Medal", "Silver Medal" and "Bronze Medal". 
For the left two athletes, you just need to output their relative ranks according to their scores.

Note:

  1. N is a positive integer and won't exceed 10,000.
  2. All the scores of athletes are guaranteed to be unique.
Subscribe to see which companies asked this question. 其實邏輯上還是很簡單,就是dict的排序 只不過輸出的時候需要一個trick,就是怎麼把金銀銅牌輸出出來
class Solution(object):
    def findRelativeRanks(self, nums):

        dic = {}

        i = 0

        while i < len(nums):
            dic[i] = nums[i]
            i += 1

        l = sorted(dic.iteritems(),key = lambda k:k[1],reverse = True)
        res = ['']* len(nums)
        medal = ["Gold Medal", "Silver Medal", "Bronze Medal"]

        i = 0
        while i < min(3,len(nums)):
            res[l[i][0]] = medal[i]
            i += 1
        while i < len(nums):
            res[l[i][0]] = str(i+1)
            i += 1
        return res