力扣排序506题(相对名次)
给你一个长度为n的整数数组score,其中score[i]是第 i 位运动员在比赛中的得分。
所有得分都 互不相同
运动员将根据得分 决定名次,其中名次第1的运动员得分最高,名次第2的运动员得分第2高,
依此类推。运动员的名次决定了他们的获奖情况:
名次第 1的运动员获金牌"Gold Medal"
名次第 2 的运动员获银牌"silver Medal"。
名次第 3的运动员获铜牌"Bronze Medal"
从名次第 4 到第n的运动员,只能获得他们的名次编号
(即,名次第 x的运动员获得编号"x")。
使用长度为 n的数组 answer 返回获奖,
其中answer[i]是第 i位运动员的获奖情况。
示例 1:
输入:score =[5,4,3,2,1]
输出:['Gold Medal","SilverMedal" ,"'Bronze Medal" ,"'4" ,"5"]
解释:名次为[1,2,3,4,5]
解题思路:
1.首先可以用内置函数sorted()结合key参数堆score列表进行降序排序,同时记录下每个得分对应的原始索引位置,这样就能知道排序后的得分原来是属于哪位运动员的。
2.再根据排序后的结果,按照名次规则来确定每位运动员的获奖情况。名次第1的运动员获得金牌,名次第二的运动员获得银牌,名次第三的运动员获得铜牌。从名次第四开始的运动员获得其名次编号。
3最后,将确定好获奖情况按照原始运动员的顺序放入结果数组answer中并返回
代码:
代码解析:
1.首先通过列表推导式创建了sorted_score_with_index,他是一个包含得分和原始索引的元组列表,并且按照得分进行了降序排序。
2.然后遍历这个排序后的列表,根据索引i的值来确定对应的运动员的获奖情况,并将其放入结果数组answer中对应的位置(通过原始索引index来确定位置)。最后返回answer数组,即为每位运动员的获奖情况数组。