📅  最后修改于: 2023-12-03 14:49:52.685000             🧑  作者: Mango
当需要在未排序的数组中查找第 K 个最小元素时,可以使用优先队列(堆)。
优先队列是一种特殊的队列,其中每个元素都有一个与之相关的优先级。当需要从队列中弹出元素时,总是先弹出具有最高优先级的元素。在本例中,我们只需要弹出前 K 个最小元素,因此我们可以使用小根堆实现优先队列。
在Java中,我们可以使用PriorityQueue
类来实现优先队列。默认情况下,PriorityQueue
实现的是小根堆。
// 创建一个小根堆优先队列
PriorityQueue<Integer> pq = new PriorityQueue<>();
public int kthSmallest(int[] nums, int k) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int num : nums) {
pq.offer(num);
if (pq.size() > k) {
pq.poll();
}
}
return pq.peek();
}
时间复杂度为$O(nlogk)$。