维护一个大小为k的大根堆
class Solution:
def heapfy(self,arr,i,length):
left = 2*i+1
right = 2*i+2
if left<length and arr[left]>arr[i]:
large = left
else:
large = i
if right<length and arr[right]>arr[large]:
large = right
if i != large:
arr[i], arr[large] = arr[large], arr[i]
self.heapfy(arr,large,length)
def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
def build_heap(arr,k):
for i in range((k-1)//2,-1,-1):
self.heapfy(arr,i,k)
build_heap(arr,k)
for i in range(k,len(arr)):
if arr[i] < arr[0]:
arr[0], arr[i] = arr[i], arr[0]
self.heapfy(arr,0,k)
return arr[:k]