import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> res = new ArrayList<>();
int len = input.length;
if(len < k || k == 0){
return res;
}
// java优先队列默认是小顶堆,我们要设置为大顶堆
// 这里用的lambda表达式实现比较器接口
Queue<Integer> pq = new PriorityQueue<>(k,(a, b)->(b-a));
for(int i = 0; i < len; i++){
// 队列没满时,需要加满
if(pq.size() < k){
pq.add(input[i]);
}else{
// 队列满了即i>=k时,需要开始判断,当前值小于堆顶时需要加入队列
if(input[i] < pq.peek()){
pq.poll();
pq.add(input[i]);
}
}
}
res.addAll(pq);
return res;
}
}