Relative Ranks

Question

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.

Tags

  • Array
  • Hash

Thought

The solution is similar to Next Greater Element I. Use a hashmap to store the pair of the number and the corresponding index.

Code

class Solution(object):
    def findRelativeRanks(self, nums):
        """
        :type nums: List[int]
        :rtype: List[str]
        """
        sortNum = sorted(nums)
        sortNum.reverse()
        sortDict = {}
        for i, num in enumerate(sortNum):
            sortDict[num] = i
        ans = []
        for num in nums:
            rank = sortDict[num]
            if rank == 0:
                ans.append('Gold Medal')
            elif rank == 1:
                ans.append('Silver Medal')
            elif rank == 2:
                ans.append('Bronze Medal')
            else:
                ans.append(str(rank + 1))
        return ans

results matching ""

    No results matching ""