算法42-----相对名次

Posted lee-yl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法42-----相对名次相关的知识,希望对你有一定的参考价值。

一、题目:

给出 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").
余下的两名运动员,我们只需要通过他们的成绩计算将其相对名次即可。

提示:

  1. N 是一个正整数并且不会超过 10000。
  2. 所有运动员的成绩都不相同。

二、思路:

复制一个相同数组ans ,排序,定义一个排名数组,从原数组中寻找与arr[j]相同元素,在排名数组中对应位置赋值为j+1(记录运动员排名), j=0,1,2时特殊处理为”Gold Medal”, “Silver Medal”, “Bronze Medal”

三、代码:

class Solution(object):
    def findRelativeRanks(self, nums):
        """
        :type nums: List[int]
        :rtype: List[str]
        """

        if len(nums) == 1:
            return ["Gold Medal"]
        elif len(nums) == 2:
            if nums[0] > nums[1]:
                return ["Gold Medal", "Silver Medal"]
            else:
                return ["Silver Medal","Gold Medal"]
        ans , d = [0] * len(nums) , sorted([(num,index) for index,num in enumerate(nums)],reverse = True)
        ans[d[0][1]] , ans[d[1][1]] ,ans[d[2][1]] = ["Gold Medal","Silver Medal","Bronze Medal"]

        for i in range(3,len(nums)):
            ans[d[i][1]] = str(i+1)
        return ans
        
            
            
        

 

以上是关于算法42-----相对名次的主要内容,如果未能解决你的问题,请参考以下文章

算法千题案例每日LeetCode打卡——67.相对名次

《LeetCode之每日一题》:225.相对名次

506-相对名次

快乐水题506. 相对名次

LeetCode 506 相对名次[排序] HERODING的LeetCode之路

Leetcode刷题100天—506. 相对名次(哈希)—day77