【LeetCode】506. 相对名次

版权声明: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;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_37621506/article/details/83929881