1.题目
给你一个长度为
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
位运动员的获奖情况。
2.收获
(1)用好内部函数
(2)没思路,大部分题都是靠看参考答案做出来的
3.解答
(1)排序+哈希(Python)
class Solution:
def findRelativeRanks(self,score:List[int])->List[str]:
ranks=sorted(score,reverse=True) #排序-从大到小
ranksIndex=dict() #设置一个字典
for i in range(len(ranks)):
ranksIndex[ranks[i]]=i #给数据编号
res=[]
for s in score:
rank=rankIndex[s] #按score中的顺序在dict中查找
if rank==0:
res.append("Gold Medal")
elif rank==1:
res.append("Silver Medal")
elif rank==2:
res.append("Bronze Medal")
else:
res.append(str(rank+1))
return res
(2)排序+pair(相当于有两个元素的结构体)
class Solution:
def find(slef,score:List[int])->List[str]
for i in range(len(score))
ranks=[score[i],i]
ranks.sort(reverse=True)
res=[0]*len(score)
for i in range(len(ranks)):
r = ranks[i]
if i == 0:
res[r[1]] = "Gold Medal"
elif i == 1:
res[r[1]] = "Silver Medal"
elif i == 2:
res[r[1]] = "Bronze Medal"
else:
res[r[1]] = str(i + 1)
return res