Leetcode 506. 相對名次(可以,一次過)
阿新 • • 發佈:2022-06-01
給你一個長度為 n 的整數陣列 score ,其中 score[i] 是第 i 位運動員在比賽中的得分。所有得分都 互不相同 。
運動員將根據得分 決定名次 ,其中名次第 1 的運動員得分最高,名次第 2 的運動員得分第 2 高,依此類推。運動員的名次決定了他們的獲獎情況:
- 名次第 1 的運動員獲金牌 "Gold Medal" 。
- 名次第 2 的運動員獲銀牌 "Silver Medal" 。
- 名次第 3 的運動員獲銅牌 "Bronze Medal" 。
- 從名次第 4 到第 n 的運動員,只能獲得他們的名次編號(即,名次第 x 的運動員獲得編號 "x")。
使用長度為 n 的陣列 answer 返回獲獎,其中 answer[i] 是第 i 位運動員的獲獎情況。
示例 1:
輸入:score = [5,4,3,2,1]
輸出:["Gold Medal","Silver Medal","Bronze Medal","4","5"]
解釋:名次為 [1st, 2nd, 3rd, 4th, 5th] 。
示例 2:
輸入:score = [10,3,8,9,4]
輸出:["Gold Medal","5","Bronze Medal","Silver Medal","4"]
解釋:名次為 [1st, 5th, 3rd, 2nd, 4th] 。
提示:
- n == score.length
- 1 <= n <= 10^4
- 0 <= score[i] <= 10^6
- score 中的所有值 互不相同
主要思路:map儲存即可
Code:
class Solution { public: vector<string> findRelativeRanks(vector<int>& score) { vector<string>res; vector<int>vec=score; sort(vec.begin(),vec.end(),greater<int>()); unordered_map<int,string>mymap; for(int i=0;i<vec.size();i++) { if((i+1)<=3) { switch (i) { case 0: mymap[vec[i]]="Gold Medal"; break; case 1: mymap[vec[i]]="Silver Medal"; break; case 2: mymap[vec[i]]="Bronze Medal"; break; default: break; } } else { mymap[vec[i]]=to_string(i+1); } } unordered_map<int,string>::iterator it; for(it=mymap.begin();it!=mymap.end();++it) { // cout<<it->first<<" "<<it->second<<endl; } for(int i=0;i<score.size();i++) { for(it=mymap.begin();it!=mymap.end();++it) { if(it->first==score[i]) { res.push_back(it->second); break; } // cout<<it->first<<" "<<it->second<<endl; } } for(int i=0;i<res.size();i++) { cout<<res[i]<<endl; } return res; } };