【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".

class Solution(object):

    def findRelativeRanks(self, nums):

        """

        :type nums: List[int]

        :rtype: List[str]

        """

        sort = sorted(nums)[::-1]

        rank = ["Gold Medal", "Silver Medal", "Bronze Medal"]+map(str, range(4, len(nums)+1))

        return map(dict(zip(sort,rank)).get, nums)

1 因为scores不是sorted的,所以其中一种好的solution就是,建立一个map,找到score和rank之间的对应关系

2 在找对应关系的过程中,我们需要对score进行sort,以便和rank建立关系,由于我们不想让原始array的顺序打乱,所以在这里我们使用sorted函数,而不是in-place的list.sort(),然后我们是想从大到小排,所以在sorted()后面加一个[::-1]代表逆序。list.sort()的逆序是加一个参数reverse=True

3 同时我们也需要建立rank array,由于前三名是固定的,从第四名开始,我们可以建立一个map函数,map中的function是str,代表把数字转换成str,后面输入数字是4到len(nums)+1

4 最后一步建立一个dictionary,sort array中元素是key,rank array中元素是value,进而建立一个map,原始nums是输入,function就是这个dictionary,这样nums作为输入放到dictionary中得到相应的rank

5 使用zip函数将sort和rank打包,进而一起输入到dict中

6 dict().get是返回指定键的值

7 return map(dict(zip(sort,rank)).get, nums) map外面不要加[], 因为map就是返回一个list

你可能感兴趣的:(【Leetcode】506. Relative Ranks)