问题背景:在一大堆数中求其前k大或前k小的问题,简称TOP-K问题。
题目链接
这是一类很经典的问题可以有多种解决的方法,这些方法中包含了一些巧妙的数据结构和算法思想。因此简单的排序取值的方法就不再说了。
方法一:
利用快排实现查找。
按照从大到小排序,然后每次计算多少大于标定值的,每次缩小搜查范围。
class Solution(object):
def findKthLargest(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
left, right, pivot = self.divide(nums)
if len(left)+1>k:
return self.findKthLargest(left,k)
elif len(left)+1<k:
return self.findKthLargest(right, k-len(left)-1)
elif len(left)+1 == k:
return pivot
def divide(self, nums): # 返回分割之后的两个数组
if len(nums)<=1:
return [],[],nums[0]
pivot_index = random.randint(0, len(