【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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章