最小的k个数
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
示例 1:
输入:arr = [3,2,1], k = 2
输出:[1,2] 或者 [2,1]
示例 2:
输入:arr = [0,1,2,1], k = 1
输出:[0]
class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
int[] res = new int[k];
if(k<1 || k>arr.length)
return res;
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>((o1,o2) -> o2-o1);
for(int a : arr){
if(priorityQueue.size() < k){
//堆中未满先添加,不执行后面语句
priorityQueue.add(a);
continue;
}
if(priorityQueue.peek() > a){
priorityQueue.poll();
priorityQueue.add(a);
}
}
int i = 0;
for(int p : priorityQueue){
res[i++] = p;
}
return res;
}
}