PU Relative Ranks

Jan 01, 1970

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".

  • N is a positive integer and won't exceed 10,000.
  • All the scores of athletes are guaranteed to be unique.

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.

Python Solution:

class Solution(object):
    def findRelativeRanks(self, nums):
        """
        :type nums: List[int]
        :rtype: List[str]
        """
        num_ind = sorted(((num, ind) for ind, num in enumerate(nums)), reverse = True)
        idd = {num_ind[1]: i + 1 for i, num_ind in enumerate(num_ind)}
        res = []
        for i, num in enumerate(nums):
            if idd[i] == 1:
                res.append("Gold Medal")
            elif idd[i] == 2:
                res.append("Silver Medal")
            elif idd[i] == 3:
                res.append("Bronze Medal")
            else:
                res.append(str(idd[i]))
        return res

Summary:

  • sort, nothing else.

LeetCode: 506. Relative Ranks