class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
//java中的堆是优先队列
if(k == 0 || arr.length == 0){
return new int[0];
}
//求前k个最小值,用大根堆
Queue<Integer> pq = new PriorityQueue<>((v1,v2) -> v2 - v1);
//数组的数加入堆
for(int num : arr){
if(pq.size()<k){
pq.offer(num);
}
else if(num < pq.peek()){
pq.poll();
pq.offer(num);
}
}
int[] ans = new int[pq.size()];
int idx = 0;
for(int num : pq){
ans[idx] = num;
idx++;
}
return ans;
}
}