LeetCode算法学习之数组中的第K个最大元素
完整代码实现
class Solution {public int findKthLargest(int[] nums, int k) {PriorityQueue<Integer> minHeap = new PriorityQueue<>();for (int num : nums) {minHeap.offer(num);if(minHeap.size() > k) {minHeap.poll();}}return minHeap.peek();}
}
解题思路:
最小堆的特性
最小堆:堆顶元素始终是堆中的最小值
操作时间复杂度:
插入元素(offer):O(log k)
移除堆顶(poll):O(log k)
查看堆顶(peek):O(1)
算法步骤
1. 初始化最小堆:创建一个大小为 k 的最小堆
2. 遍历数组:
将当前元素插入堆中
如果堆的大小超过 k,移除堆顶元素(当前最小值),确保堆中保留的是前 k 个最大元素
3. 返回结果:遍历结束后,堆顶元素即为第 k 个最大的元素
