class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: """堆排序思想""" def heapify(array, start, end): while True: max_pos = start #初始化最大值所在位置为目标所在 if start*2 + 1 <= end and array[max_pos] < array[start*2+1]: # 若是左叶子节点存在,且大于目标值,则将最大值所在位置指向该节点所在位置 max_pos = start*2 + 1 if start*2 + 2 <= end and array[max_pos] < array[start*2+2]: # 若是右叶子节点存在,且大于目标值,则将最大值所在位置指向该节点所在位置 max_pos = start*2 + 2 if max_pos == start: # 若是目标即为最大,完成该节点堆化,跳出循环 break # 交换位置,将最大值 array[start], array[max_pos] = array[max_pos], array[start] start = max_pos # 建堆,只须要对前半节点堆化 for i in range(len(nums)//2-1, -1, -1): heapify(nums, i, len(nums)-1) # 排序,只须要循环K次,排序TOP K个节点 i = len(nums) - 1 while i > len(nums) - 1 - k: nums[0], nums[i] = nums[i], nums[0] i -= 1 heapify(nums, 0, i) return nums[len(nums)-k]