215. 数组中的第K个最大元素
查看题目中等
数组
分治
快速选择
排序
堆
频率: 554
解法一:min-heap
时间复杂度:O(n log k) | 空间复杂度:O(k) | 推荐使用
动画演示
准备就绪 - 点击开始按钮查看小顶堆动画
代码实现
class Solution {
public int findKthLargest(int[] nums, int k) {
// 创建小顶堆,维护k个最大元素
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
for (int num : nums) {
if (minHeap.size() < k) {
// 堆未满,直接添加
minHeap.offer(num);
} else {
// 堆已满,比较堆顶
if (num > minHeap.peek()) {
// 当前元素大于堆顶,替换堆顶
minHeap.poll();
minHeap.offer(num);
}
}
}
// 堆顶即为第k大元素
return minHeap.peek();
}
}
时间复杂度:O(n log k)
空间复杂度:O(k)
使用小顶堆维护k个最大元素,堆顶即为第k大元素