#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param input int整型一维数组
# @param k int整型
# @return int整型一维数组
#
import heapq
class Solution:
def GetLeastNumbers_Solution(self , input: List[int], k: int) -> List[int]:
# 堆排序-优先队列
#求最小值,用大顶堆,每次与堆顶元素比较,比堆顶小,弹出堆顶,弹入较小值
n=len(input)
res=[]
if n==0 or k==0:
return res
if n>=k and k!=0:
#heapq默认小根堆,若要构造大根堆,每次输入要乘-1
pq=[]
for i in range(k):
#构建一个大小为k的堆
heapq.heappush(pq,(-1*input[i]))
for i in range(k, n):
#较小元素入堆
if (-1 * pq[0]) > input[i]:
#删除最小值并添加新元素
heapq.heapreplace(pq, (-1 * input[i]))
#取出堆中元素
for i in range(k):
res.append(-1*pq[0])
heapq.heappop(pq)
return res