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^stplace athlete's rank is"Gold Medal". - The
2^ndplace athlete's rank is"Silver Medal". - The
3^rdplace athlete's rank is"Bronze Medal". - For the
4^thplace to then^thplace athlete, their rank is their placement number (i.e., thex^thplace 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.length1 <= n <= 10^40 <= score[i] <= 10^6- All the values in
scoreare 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;
}