Welcome to Subscribe On Youtube
506. Relative Ranks
Description
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 [1^{st}, 2^{nd}, 3^{rd}, 4^{th}, 5^{th}].
Example 2:
Input: score = [10,3,8,9,4] Output: ["Gold Medal","5","Bronze Medal","Silver Medal","4"] Explanation: The placements are [1^{st}, 5^{th}, 3^{rd}, 2^{nd}, 4^{th}].
Constraints:
n == score.length
1 <= n <= 10^{4}
0 <= score[i] <= 10^{6}
 All the values in
score
are unique.
Solutions

class Solution { public String[] findRelativeRanks(int[] score) { int n = score.length; Integer[] idx = new Integer[n]; for (int i = 0; i < n; ++i) { idx[i] = i; } Arrays.sort(idx, (i1, i2) > score[i2]  score[i1]); String[] ans = new String[n]; String[] top3 = new String[] {"Gold Medal", "Silver Medal", "Bronze Medal"}; for (int i = 0; i < n; ++i) { ans[idx[i]] = i < 3 ? top3[i] : String.valueOf(i + 1); } return ans; } }

class Solution { public: vector<string> findRelativeRanks(vector<int>& score) { int n = score.size(); vector<pair<int, int>> idx; for (int i = 0; i < n; ++i) idx.push_back(make_pair(score[i], i)); sort(idx.begin(), idx.end(), [&](const pair<int, int>& x, const pair<int, int>& y) { return x.first > y.first; }); vector<string> ans(n); vector<string> top3 = {"Gold Medal", "Silver Medal", "Bronze Medal"}; for (int i = 0; i < n; ++i) ans[idx[i].second] = i < 3 ? top3[i] : to_string(i + 1); return ans; } };

class Solution: def findRelativeRanks(self, score: List[int]) > List[str]: n = len(score) idx = list(range(n)) idx.sort(key=lambda x: score[x]) top3 = ['Gold Medal', 'Silver Medal', 'Bronze Medal'] ans = [None] * n for i in range(n): ans[idx[i]] = top3[i] if i < 3 else str(i + 1) return ans

func findRelativeRanks(score []int) []string { n := len(score) idx := make([][]int, n) for i := 0; i < n; i++ { idx[i] = []int{score[i], i} } sort.Slice(idx, func(i1, i2 int) bool { return idx[i1][0] > idx[i2][0] }) ans := make([]string, n) top3 := []string{"Gold Medal", "Silver Medal", "Bronze Medal"} for i := 0; i < n; i++ { if i < 3 { ans[idx[i][1]] = top3[i] } else { ans[idx[i][1]] = strconv.Itoa(i + 1) } } return ans }