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