Cho mảng điểm số của N vận động viên. Xếp hạng: 1 → "Gold", 2 → "Silver", 3 → "Bronze", các thứ khác → số thứ tự.
Ví dụ: [2,5,3,1,0] → điểm cao nhất 5 (Gold), tiếp 3 (Silver), 2 (Bronze), 1 (4), 0 (5) → ["Bronze","Gold","Silver","4","5"].
Giải thuật
- Sao chép mảng điểm, sắp xếp giảm dần.
- Tạo map từ điểm → huy hiệu/thứ hạng.
- Duyệt mảng gốc, tra map để lấy kết quả.
Ví dụ triển khai C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
vector<string> findRelativeRanks(vector<int>& score) {
int n = score.size();
vector<int> sorted = score;
sort(sorted.rbegin(), sorted.rend());
unordered_map<int, string> rank;
if (n >= 1) rank[sorted[0]] = "Gold Medal";
if (n >= 2) rank[sorted[1]] = "Silver Medal";
if (n >= 3) rank[sorted[2]] = "Bronze Medal";
for (int i = 3; i < n; i++)
rank[sorted[i]] = to_string(i + 1);
vector<string> res;
for (int s : score) res.push_back(rank[s]);
return res;
}
};
void print(vector<string> v) {
cout << "[";
for (int i = 0; i < v.size(); i++) cout << v[i] << (i+1
Đầu vào / Đầu ra
Input: {2,5,3,1,0}
Output: [Bronze Medal, Gold Medal, Silver Medal, 4, 5]