TopK问题即求解第K个最大or最小元素的问题,一般使用快排、堆和桶来实现。
1 快速排序:
先总结快速排序的python模板。首先使用partition函数完成对数组从pivot的划分工作。
partition函数模板:
# 将数组分为小于基准值、基准值、大于基准值三个部分
def partition(nums, left, right):
pivot = nums[left] # 初始化一个基准值
i, j = left, right
while(i < j):
while(i < j and nums[j] >= pivot): j -= 1 # 从后往前查找,直到找到一个比pivot小的数
nums[i] = nums[j] # 把这个数放左边来
while(i < j and nums[i] <= pivot): i += 1 # 从前往后查找,直到找到一个比pivot大的数
nums[j] = nums[i] # 把这个数放右边来
nums[i] = pivot
return i # 返回基准值最终位置
然后使用partition递归完成快排。
快排模板:
def quicksort(nums, left, right):
if left < right:
index = partition(nums, left, right) # 一个一个固定pivot的位置,直