Get K small Num 最小的k个数
输入int[],找出最小的k个数。
输入:arr = [3,2,1], k = 2
输出:[1,2] 或者 [2,1]
思路
可以通过大顶堆,来保持k个数,来得到最小的k个数
public int[] getLeastNumbers(int[] arr, int k) {
int[] ans = new int[k];
if(k==0){
return new int[]{};
}
if(arr.length<=0){
return new int[]{};
}
PriorityQueue<Integer> pq = new PriorityQueue<Integer>((o1, o2)->o2-o1);
for (int i = 0; i < arr.length; i++) {
if (pq.size()<k){
pq.offer(arr[i]);
continue;
}
if (arr[i]< pq.peek()) {
pq.poll();
pq.offer(arr[i]);
}
}
for (int i = 0; i < ans.length; i++) {
ans[i]=pq.poll();
}
return ans;
}
Tag
heap