题目为Leetcode215需要求数组中的第K个最大元素,一个方法是直接进行排序,然后寻找第n-k下标的元素,然而这样效果会差一点,我们可以直接在排序的时候进行判断,借助快速排序,如果当前元素左边的个数小于len(nums)-k-1,则递归进行右边进行快速排序,反之在左边进行快速排序,但是这样不能解决存在大量重复元素超时的问题,还可以进行优化,划分left,mid,right三路,代码参考如下:
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
def quickselect(mylist,k):
randomIndex = random.randint(0,len(mylist)-1)
pivot = mylist[randomIndex]
left, right, mid = [], [], []
for i in mylist:
if i < pivot:
left.append(i)
elif i > pivot:
right.append(i)
elif i == pivot:
mid.append(i)
if len(right) >= k:
pivot = quickselect(right, k)
elif len(right) + len(mid) < k:
pivot = quickselect(left, k - len(right) - len(mid))
return pivot
r = quickselect(nums, k)
return r