1. 程式人生 > >【LeetCode】506. 相對名次

【LeetCode】506. 相對名次

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