1. 程式人生 > >LeetCode 506. 相對名次(C++、python)

LeetCode 506. 相對名次(C++、python)

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

(注:分數越高的選手,排名越靠前。)

示例 1:

輸入: [5, 4, 3, 2, 1]
輸出: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]
解釋: 前三名運動員的成績為前三高的,因此將會分別被授予 “金牌”,“銀牌”和“銅牌” ("Gold Medal", "Silver Medal" and "Bronze Medal").
餘下的兩名運動員,我們只需要通過他們的成績計算將其相對名次即可。

提示:

N 是一個正整數並且不會超過 10000。

所有運動員的成績都不相同。

C++

class Solution {
public:
    vector<string> findRelativeRanks(vector<int>& nums) 
    {
        int n=nums.size();
        vector<string> res(n,"");
        map<int,int> tmp;
        for(int i=0;i<n;i++)
        {
            tmp[nums[i]]=i;
        }
        int ranking=1;
        for(auto it=tmp.rbegin();it!=tmp.rend();it++)
        {
            if(1==ranking)
            {
                res[it->second]="Gold Medal";
            }
            else if(2==ranking)
            {
                res[it->second]="Silver Medal";
            }
            else if(3==ranking)
            {
                res[it->second]="Bronze Medal";  
            }
            else
            {
                res[it->second]=to_string(ranking);
            }
            ranking++;
        }
        return res;
    }
};

python

class Solution:
    def findRelativeRanks(self, nums):
        """
        :type nums: List[int]
        :rtype: List[str]
        """
        n=len(nums)
        res=["" for i in range(n)]
        dic={}
        for i in range(n):
            if nums[i] not in dic:
                dic[nums[i]]=i
        tmp=sorted(dic.keys())
        tmp.reverse()
        for i in range(n):
            if 0==i:
                res[dic[tmp[i]]]="Gold Medal"
            elif 1==i:
                res[dic[tmp[i]]]="Silver Medal" 
            elif 2==i:
                res[dic[tmp[i]]]="Bronze Medal"
            else:
                res[dic[tmp[i]]]=str(i+1)
        return res