原理
要下班捏,我又直接开摆,上链接!
实战
在排序过程中可以找到第k大的数,因为每次递归都会固定哨兵的位置。
def findKthLargest(self, nums: List[int], k: int) -> int:
l, r = 0, len(nums)-1
def partion(nums, l, r):
randindex = randint(l, r)
nums[l], nums[randindex] = nums[randindex], nums[l]
pivot = nums[l]
idx = l
for i in range(l+1, r+1):
if nums[i] >= pivot:
idx += 1
nums[idx], nums[i] = nums[i], nums[idx]
nums[idx], nums[l] = nums[l], nums[idx]
return idx
while True:
pivot = partion(nums, l, r)
if pivot == k-1:
return nums[pivot]
elif pivot > k-1:
l, r = l, pivot-1
else:
l, r = pivot+1 ,r