1. 程式人生 > 其它 >LeetCode——506. 相對名次

LeetCode——506. 相對名次

技術標籤:C++leetcode雜湊leetcodec++面試

題目描述:

給出 N 名運動員的成績,找出他們的相對名次並授予前三名對應的獎牌。前三名運動員將會被分別授予 “金牌”,“銀牌” 和“ 銅牌”(“Gold Medal”, “Silver Medal”, “Bronze Medal”)。
(注:分數越高的選手,排名越靠前。)

提示:
N 是一個正整數並且不會超過 10000。
所有運動員的成績都不相同。

示例 1:
輸入: [5, 4, 3, 2, 1]
輸出: [“Gold Medal”, “Silver Medal”, “Bronze Medal”, “4”, “5”]
解釋: 前三名運動員的成績為前三高的,因此將會分別被授予 “金牌”,“銀牌”和“銅牌” (“Gold Medal”, “Silver Medal” and “Bronze Medal”).

餘下的兩名運動員,我們只需要通過他們的成績計算將其相對名次即可。

程式碼如下:

class Solution {
public:
    string trans(int i) {
        if (i==1) return "Gold Medal";
        if (i==2) return "Silver Medal";
        if (i==3) return "Bronze Medal";
        return to_string(i);
    }
    vector<string>
findRelativeRanks(vector<int>& nums) { int size=nums.size(); vector<string>vs; vector<int>v(nums); sort(v.begin(),v.end(),greater<int>()); unordered_map<int,int>m; for(int i=0;i<size;i++){ m[v[i]]=i+1; }
for(int j=0;j<size;j++){ auto pos=m.find(nums[j]); vs.push_back(trans(pos->second)); } return vs; } };

執行結果:
在這裡插入圖片描述