1.简单粗暴 排序选择第i-k-1元素
2.对计数数组进行遍历后(执行C[i] += C[i-1]),C[i]代表待排序数组中值小于等于i的元素个数,而C[i-1]代表值小于等于i-1的元素个数,如果 C[i-1] < k并且k <= C[i],那么待排序数组中第k小的数必定就是值为i的数!查找就可以结束了。所以只需要找到第一个满足条件k <= C[i]的i即可。
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
pivot = num[low]
while (low < high):
while (low < high and num[high] > pivot):
high -= 1
while (low < high and num[low] < pivot):
low += 1
num[low],num[high] = num[high],num[low]
num[high] = pivot
return high,num
def findkth(num,low,high,k): #找到数组里第k个数
index=(partition(num,low,high))[0]
print((partition(num,low,high))[1])
if index==k:return num[index]
if index<k:
return findkth(num,index+1,high,k)
else:
return findkth(num,low,index-1,k)