Relative Ranks
Problem
You are given an integer array score
of size n
, where score[i]
is the score of the ith
athlete in a competition. All the scores are guaranteed to be unique.
The athletes are placed based on their scores, where the 1st
place athlete has the highest score, the 2nd
place athlete has the 2nd
highest score, and so on. The placement of each athlete determines their rank:
- The
1st
place athlete’s rank is"Gold Medal"
. - The
2nd
place athlete’s rank is"Silver Medal"
. - The
3rd
place athlete’s rank is"Bronze Medal"
. - For the
4th
place to thenth
place athlete, their rank is their placement number (i.e., thexth
place athlete’s rank is"x"
).
Return an array answer
of size n
where answer[i]
is the rank of the ith
athlete.
Constraints
n == score.length
1 <= n <= 104
0 <= score[i] <= 106
- All the values in
score
are unique.
Solution
The problem Relative Ranks
can be solved using an ordered map. It is possible to sort the order by rank by setting the score as a key and the order as the value. The map can then be iterated to place the rank in the corresponding slot.
Implementation
class Solution
{
public:
vector<string> findRelativeRanks(vector<int> &score)
{
map<int, int, greater<int>> hashmap;
for (int i = 0; i < score.size(); i++)
hashmap[score[i]] = i;
vector<string> ret;
ret.resize(score.size());
int rank = 1;
for (auto it = hashmap.begin(); it != hashmap.end(); it++, rank++)
{
if (rank == 1)
ret[it->second] = "Gold Medal";
else if (rank == 2)
ret[it->second] = "Silver Medal";
else if (rank == 3)
ret[it->second] = "Bronze Medal";
else
ret[it->second] = to_string(rank);
}
return ret;
}
};