
解题思路:
    主要思路是通过vector<int> 存储每个运动员的得分[0]和初始位置[1],而后通过sort()对vector<vector<int>> arr根据[0]从大到小进行排序,得到顺序后对result(vector<string>)进行赋值操作,具体为result[arr[i][1]]=to_string(i+1) 和result[arr[i][1]]=t[i]。
    △可以将arr优化为vector<int>,记录下原始位置,排序的lambda函数变为[&](int i,int j){return score[i]>score[j];}
    以下为C++代码:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 
 | class Solution {private:
 string t[3]={"Gold Medal","Silver Medal","Bronze Medal"};
 public:
 vector<string> findRelativeRanks(vector<int>& score) {
 vector<vector<int>> vec;
 int len=score.size();
 for(int i=0;i<len;i++){
 vector<int> temp(2,0);
 temp[0]=score[i];
 temp[1]=i;
 vec.push_back(temp);
 }
 
 sort(vec.begin(), vec.end(), [](vector<int>& i,vector<int>& j) {return i[0] > j[0]; });
 
 vector<string> result(len, "");
 if (len <= 2) {
 for (int i = 0; i < len; i++) {
 result[vec[i][1]] = t[i];
 }
 return result;
 }
 
 for (int i = 0; i < 3; i++) {
 result[vec[i][1]] = t[i];
 }
 for (int i = 3; i < len; i++) {
 result[vec[i][1]] = to_string(i + 1);
 }
 
 return result;
 }
 };
 
 |