- 给定一个包含n个整数的数组nums,找到数组中第k个最大元素。例如,给定数组[3,2,1,5,6,4]和k = 2,函数应该返回5。
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> heap = new PriorityQueue<>(); // 创建小根堆
for (int num : nums) {
heap.offer(num); // 将元素加入小根堆
if (heap.size() > k) {
heap.poll(); // 如果小根堆的大小超过了 k,则弹出堆顶元素
}
}
return heap.peek(); // 返回堆顶元素
}
注释中解释了每个部分的作用:
- 创建一个小根堆 heap。
- 遍历整个数组,将每个元素加入小根堆中。
- 如果小根堆的大小大于 k,则弹出堆顶元素,保证堆的大小为 k。
- 最后,返回小根堆的堆顶元素,即第 k 大的元素。
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> heap = new PriorityQueue<>(Collections.reverseOrder()); // 创建大根堆
for (int num : nums) {
heap.offer(num); // 将元素加入大根堆
}
int result = 0;
while (k > 0) {
result = heap.poll(); // 弹出堆顶元素
k--; // k 减 1
}
return result; // 返回第 k 大的元素
}
注释中解释了每个部分的作用:
- 创建一个大根堆 heap。
- 遍历整个数组,将每个元素加入大根堆中。
- 弹出大根堆的堆顶元素 k 次,得到第 k 大的元素。
- 返回第 k 大的元素。