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

猜你喜欢

转载自blog.csdn.net/qq_27060423/article/details/84062284
今日推荐