506. Relative Ranks
Problem
Tags: Array
, Sorting
, Heap (Priority Queue)
You are given an integer array score
of size n
, where score[i]
is the score of the i^th
athlete in a competition. All the scores are guaranteed to be unique.
The athletes are placed based on their scores, where the 1^st
place athlete has the highest score, the 2^nd
place athlete has the 2^nd
highest score, and so on. The placement of each athlete determines their rank:
- The
1^st
place athlete's rank is"Gold Medal"
. - The
2^nd
place athlete's rank is"Silver Medal"
. - The
3^rd
place athlete's rank is"Bronze Medal"
. - For the
4^th
place to then^th
place athlete, their rank is their placement number (i.e., thex^th
place athlete's rank is"x"
).
Return an array answer
of size n
where answer[i]
is the rank of the i^th
athlete.
Example 1:
Input: score = [5,4,3,2,1]
Output: ["Gold Medal","Silver Medal","Bronze Medal","4","5"]
Explanation: The placements are [1st, 2nd, 3rd, 4th, 5th].
Example 2:
Input: score = [10,3,8,9,4]
Output: ["Gold Medal","5","Bronze Medal","Silver Medal","4"]
Explanation: The placements are [1st, 5th, 3rd, 2nd, 4th].
Constraints:
n == score.length
1 <= n <= 10^4
0 <= score[i] <= 10^6
- All the values in
score
are unique.
Code
JS
// 506. Relative Ranks (10/26/53712)
// Runtime: 76 ms (93.07%) Memory: 42.64 MB (94.89%)
/**
* @param {number[]} score
* @return {string[]}
*/
const ranks = ["Gold Medal", "Silver Medal", "Bronze Medal"];
function findRelativeRanks(score) {
const pairs = [];
for (let i = 0; i < score.length; i++) pairs.push([i, score[i]]);
pairs.sort((a, b) => b[1] - a[1]);
const result = [];
pairs.forEach((pair, i) => {
result[pair[0]] = i < 3 ? ranks[i] : (i + 1).toString();
});
return result;
}