解题思路:
主要思路是通过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); }
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; } };
|