LeetCode 506. Relative Ranks

问题描述:

Given scores of N athletes, find their relative ranks and the people with the top three highest scores, who will be awarded medals: "Gold Medal", "Silver Medal" and "Bronze Medal".

Example 1:

Input: [5, 4, 3, 2, 1]
Output: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]
Explanation: The first three athletes got the top three highest scores, so they got "Gold Medal", "Silver Medal" and "Bronze Medal". 
For the left two athletes, you just need to output their relative ranks according to their scores.

Note:

  1. N is a positive integer and won't exceed 10,000.
  2. All the scores of athletes are guaranteed to be unique.
思路:这道题比较简单,具体思路就是把得分nums进行排序,排序结果的分数位置就是排名,在把原始nums中的得分用排名替换即可。AC后去看solution,发现了一个3行的python代码,思路是一样的,但是这又一次体现出了python库函数的强大和极简风格。下面吧代码一并贴出

我的代码:

class Solution(object):
    def findRelativeRanks(self, nums):
        """
        :type nums: List[int]
        :rtype: List[str]
        """
        temp = sorted(nums,reverse=True)
        r = []
        for n in nums:
            no = temp.index(n)+1
            if no == 1:
                no = "Gold Medal"
            elif no == 2:
                no = "Silver Medal"
            elif no == 3:
                no = "Bronze Medal"
            r.append(str(no))
        return r

3行python:

def findRelativeRanks(self, nums):
    sort = sorted(nums)[::-1]  #可以用reverse=True代替,作者说两者复杂度是一样的,大师[::-1]只要打6个字符.....大牛就是大牛,任性

    #这句是创建一个形如这样的list   ["Gold Medal", "Silver Medal", "Bronze Medal", "4","5",..."n"]
    rank = ["Gold Medal", "Silver Medal", "Bronze Medal"] + map(str, range(4, len(nums) + 1))

    #这句return最能体现python强大的库函数,zip吧两个list一一对应的映射起来形成dict,在把nums里面的元素全部在dict里get一遍
    return map(dict(zip(sort, rank)).get, nums)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值