版权声明:made by YYT https://blog.csdn.net/qq_37621506/article/details/83929881
1.题目
给出 N 名运动员的成绩,找出他们的相对名次并授予前三名对应的奖牌。前三名运动员将会被分别授予 “金牌”,“银牌” 和“ 铜牌”(“Gold
Medal”, “Silver Medal”, “Bronze Medal”)。(注:分数越高的选手,排名越靠前。)
点击跳转原题
2.思路
建立一个新的数组arr=nums,用于存放从大到小排序好的元素;
遍历数组arr,按顺序放入相应string到返回的数组res中。
3.思路
class Solution {
public:
vector<string> findRelativeRanks(vector<int>& nums) {
int len=nums.size();
vector<int>arr=nums;
sort(arr.begin(),arr.end());
reverse(arr.begin(),arr.end());
vector<string>res(len);
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
if(nums[i]==arr[j]){
switch(j){
case 0:{
res[i]="Gold Medal";
break;
}
case 1:{
res[i]="Silver Medal";
break;
}
case 2:{
res[i]="Bronze Medal";
break;
}
default:{
stringstream s;
s<<j+1;
res[i]=s.str();
break;
}
}
}
}
}
vector<string>::iterator t;
for(t=res.begin();t!=res.end();t++){
cout<<*t<<endl;
}
return res;}
};
4.优秀案例
利用map
class Solution {
public:
vector<string> findRelativeRanks(vector<int>& nums) {
map<int,int> mp;
vector<string> res(nums.size(), "");
for(int i = 0 ;i <nums.size();i++)
{
mp[nums[i]] = i;
}
int cnt = 1;
map<int, int>::reverse_iterator it;
for(it = mp.rbegin(); it != mp.rend(); it++) {
if(cnt == 1) {
res[it->second] = "Gold Medal";
} else if(cnt == 2) {
res[it->second] = "Silver Medal";
} else if(cnt == 3) {
res[it->second] = "Bronze Medal";
} else {
res[it->second] = to_string(cnt);
}
cnt++;
}
return res;
}
};