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:
- N is a positive integer and won't exceed 10,000.
- 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