#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param a int整型一维数组
# @param n int整型
# @param K int整型
# @return int整型
#
class Solution:
def findKth(self , a: List[int], n: int, K: int) -> int:
# write code here
def heapify(arr, n, i):
"""
维护一个父节点为i的最小堆
"""
l = 2*i + 1
r = 2*i + 2
small = i
if l<n and arr[l] < arr[small]:
small = l
if r<n and arr[r] < arr[small]:
small = r
if i != small:
arr[small], arr[i] = arr[i], arr[small]
heapify(arr, n, small)
def buildMinHeap(arr, K):
"""
构建前k个元素的最小堆
"""
n = len(arr)
last_parent = (K-1)//2
for i in range(last_parent, -1, -1):
heapify(arr, K, i)
def updateHeap(arr, item):
"""
item比堆顶大,更新最小堆
"""
if item > arr[0]:
arr[0] = item
heapify(arr, K, 0)
buildMinHeap(a, K)
for item in range(K, n):
updateHeap(a, a[item])
"""
最大的k个元素生成的最小堆,堆顶就是第k大
"""
return a[0]