class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
int[] vec = new int[k];
if (k == 0) { // 排除 0 的情况
return vec;
}
Queue<Integer> maxheap = new PriorityQueue<>(k, (i1, i2) -> Integer.compare(i2, i1));
for(int i = 0 ;i<arr.length;i++){
if(maxheap.size()<k){
maxheap.offer(arr[i]);
}else{
Integer top = maxheap.peek();
if(top!=null){
if(arr[i]<top){
maxheap.poll();
maxheap.offer(arr[i]);
}
}
}
}
int[] array = new int [k];
for(int i =0 ;i<k;i++){
array[i] = maxheap.poll();
}
return array;
}
}
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4
最新推荐文章于 2021-10-27 15:28:23 发布
该代码实现了一个名为`Solution`的类,其中包含一个`getLeastNumbers`方法。该方法接收一个整数数组`arr`和一个整数`k`作为参数,目的是找到数组中最小的`k`个数。它使用了一个最大优先级队列(最小堆)来存储`k`个最小元素。当队列大小小于`k`时,新元素会被添加到队列中;如果队列已满且新元素小于队列顶部的元素,则队列顶部的元素被替换。最终,队列中的元素按升序排列并返回。

1133

被折叠的 条评论
为什么被折叠?



