class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
def adju_max_heap(nums_list, in_node):
""""in_node是内部节点的索引"""
l, r, large_idx= 2*in_node+1, 2*in_node+2, in_node
if l < len(nums_list) and nums_list[large_idx] < nums[l]:
large_idx = l
if r < len(nums_list) and nums_list[large_idx] < nums[r]:
large_idx = r
if large_idx != in_node:
nums_list[large_idx], nums_list[in_node] = nums_list[in_node], nums_list[large_idx]
adju_max_heap(nums_list, large_idx)
def build_max_heap(nums_list):
""""从后往前遍历所有内部节点,其中最后一个内部节点的公式为len(nums_list)//2 - 1"""
for in_node in range(len(nums_list)//2 - 1, -1, -1):
adju_max_heap(nums_list, in_node)
def find_kth_max(nums_list, k):
build_max_heap(nums_list)
for _ in range(k-1):
nums_list[0], nums_list[-1] = nums_list[-1], nums_list[0]
nums_list.pop()
adju_max_heap(nums_list, 0)
return nums_list[0]
return find_kth_max(nums, k)