506. 相对名次

image-20211202120224197

解题思路:

​ 主要思路是通过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++代码:

1
2
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); //添加入待排序的vec中
}

sort(vec.begin(), vec.end(), [](vector<int>& i,vector<int>& j) {return i[0] > j[0]; }); //如果返回true则不进行交换

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;
}
};