class
solution
:def
findrelativeranks
(self, nums: list[
int])-
> list[
str]
:
n =len(nums)
# 陣列長度
ans =[0
]*n # 結果
dt =
# 雜湊, 記錄每個元素開始所在的位置
for i in
range
(n):
dt[nums[i]
]= i
#nums.sort()
self.qsort(nums,
0,n-1)
# 快速排序
if n==0:
return
none
for i in
range
(n):
if i ==0:
ans[dt[nums[i]]]
="gold medal"
elif i ==1:
ans[dt[nums[i]]]
="silver medal"
elif i ==2:
ans[dt[nums[i]]]
="bronze medal"
else
: ans[dt[nums[i]]]
=str
((i+1)
)# 字串
return ans
defqsort
(self,nums, low, hight)
:if low < hight:
ans = self.qspass(nums,low,hight)
# 關鍵部分,一趟快速排序
self.qsort(nums,low,ans-1)
# 左邊的子表
self.qsort(nums,ans+
1,hight)
# 右邊的子表
defqspass
(self, nums, low, hight)
:'''把大於key的放在左子表,小的放在右子表'''
key = nums[low]
# 以第一位作為關鍵字
while low < hight:
# 從hight往low走,找到大於key的,就交換
while low<= key:
hight -=
1if low < hight:
#self.swap(nums, low, hight)
nums[low]
= nums[hight]
low +=
1# 從low往hight走,遇到比key小的,和hight交換
while low < hight and nums[low]
>= key:
low+=
1if low#self.swap(nums, low,hight)
nums[hight]
= nums[low]
hight -=
1 nums[low]
= key # 把key放在low==hight的位置
return low # 返回 key,關鍵字的小標
Leetcode 506相對名次
給出n名運動員的成績,找出他們的相對名次並授予前三名對應的獎牌。前三名運動員將會被分別授予 金牌 銀牌 和 銅牌 gold medal silver medal bronze medal 注 分數越高的選手,排名越靠前。示例 1 輸入 5,4,3,2,1 輸出 gold medal silver m...
LeetCode506 相對名次
給出 n 名運動員的成績,找出他們的相對名次並授予前三名對應的獎牌。前三名運動員將會被分別授予 金牌 銀牌 和 銅牌 gold medal silver medal bronze medal 注 分數越高的選手,排名越靠前。示例 1 n 是乙個正整數並且不會超過 10000。所有運動員的成績都不相同...
Leetcode506 相對名次 排序 雜湊
給出 n 名運動員的成績,找出他們的相對名次並授予前三名對應的獎牌。前三名運動員將會被分別授予 金牌 銀牌 和 銅牌 gold medal silver medal bronze medal note the returned array must be malloced,assume caller...