// Hash table
class Solution {
public:
vector<string> findRelativeRanks(vector<int>& score) {
unordered_map<int, int> mp;
for(int i = 0; i < score.size(); ++i)
mp[score[i]] = i;
sort(score.begin(), score.end(), [](int a, int b){ return a > b;});
vector<string> ans(score.size());
for(int i = 0; i < score.size(); ++i){
int s = score[i];
cout << s << endl;
if(i ==0){
ans[mp[s]] = "Gold Medal";
}
else if(i ==1){
ans[mp[s]] = "Silver Medal";
}
else if(i ==2){
ans[mp[s]] = "Bronze Medal";
}
else{
ans[mp[s]] = to_string(i + 1);
}
}
return ans;
}
};
// Heap
class Solution {
public:
struct Comp{
bool operator()(const pair<int, int>& p1, const pair<int, int>& p2){
return p1.first < p2.first;
}
};
vector<string> findRelativeRanks(vector<int>& score) {
priority_queue<pair<int, int>, vector<pair<int, int>>,Comp> q;
for(int i = 0; i < score.size(); ++i)
q.push({score[i], i});
int idx = 1;
vector<string> ans(score.size());
while(q.size()){
int s = q.top().second;
q.pop();
if(idx ==1){
ans[s] = "Gold Medal";
}
else if(idx ==2){
ans[s] = "Silver Medal";
}
else if(idx ==3){
ans[s] = "Bronze Medal";
}
else{
ans[s] = to_string(idx);
}
idx++;
}
return ans;
}
};