【LeetCode】506. 相對名次
阿新 • • 發佈:2018-12-20
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;
}
};