作者:白羊座的张康安_3z2_381 | 来源:互联网 | 2024-12-06 19:49
在解决如何从一个整数数组中找到最小的K个数的问题时,我们可以利用Java中的优先队列(PriorityQueue)来实现这一功能。优先队列是一种特殊的队列,删除操作总是移除具有最高优先级的元素。
class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
// 如果k为0或数组为空,则直接返回空数组
if (k == 0 || arr.length == 0) {
return new int[0];
}
// 使用最大堆来存储最小的k个数
Queue maxHeap = new PriorityQueue<>((a, b) -> b - a);
// 遍历数组,将元素加入到堆中
for (int num : arr) {
if (maxHeap.size() maxHeap.offer(num);
} else if (num maxHeap.poll();
maxHeap.offer(num);
}
}
// 将堆中的元素转换成数组返回
int[] result = new int[maxHeap.size()];
int index = 0;
for (int num : maxHeap) {
result[index++] = num;
}
return result;
}
}
上述代码首先检查了输入参数的有效性,确保了当请求的数量为0或输入数组为空时能够正确处理。接着,它创建了一个最大堆,并通过遍历输入数组来填充这个堆。对于每一个新元素,如果当前堆的大小小于k,则直接将其加入堆中;否则,只有当新元素小于堆顶元素时,才会替换掉堆顶元素。最后,将堆中的所有元素转移到一个新的数组中并返回。