其实有点震惊出这个题,典型的quick select问题,我贡献一个我的代码供参考吧
def findKthLargest(nums, start, end, k):
    if start >= end:
         return nums[end]
    
    left, right = start, end
    pivot = nums[left + (right - left) / 2]
    while left <= right:
        while left <= right and nums[left] > pivot:
            left += 1
        while left <= right and nums[right] < pivot:
            right -= 1
        if left <= right:
            nums[left], nums[right] = nums[right], nums[left]
            left += 1
            right -= 1
    
    if start + k - 1 <= right:
        return findKthLargest(nums, start, right, k)
    if start + k - 1 >= left:
        return findKthLargest(nums, left, end, k - (left - start))
    return nums[right + 1]

其实就是典型的快速排序变体而已,while循环中关于pivot的那两个大小于号一改上面这个函数就变成快排了,个人觉得这个很好记忆而且是单独找这种第k大第k小之类问题的最优解了