LeetCode算法学习之数组中的第K个最大元素

完整代码实现

java 复制代码
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 个最大元素

  1. 返回结果:遍历结束后,堆顶元素即为第 k 个最大的元素
相关推荐
210Brian9 分钟前
蓝桥杯单片机学习笔记(十四) V2026大模板源代码
单片机·学习·蓝桥杯
代码中介商13 分钟前
排序算法完全指南(六):希尔排序深度详解
java·算法·排序算法
咸甜适中27 分钟前
rust语言学习笔记Trait(十)PartialOrd、Ord(大小比较)
笔记·学习·rust
Lumbrologist28 分钟前
【C++】零基础入门 · 第 3 节:条件判断(if、switch)
开发语言·c++·算法
小+不通文墨30 分钟前
在树莓派中用*C语言*实现MQTT通信
c语言·经验分享·笔记·嵌入式硬件·学习
codealy34 分钟前
Rust 核心理论: 高并发与异步(四)
算法·rust
yh弓长38 分钟前
算法积累笔记
java·算法
笨鸟先飞的橘猫42 分钟前
skynet——服务发现学习
学习·服务发现
-To be number.wan43 分钟前
算法日记 | C++ 结构体
数据结构·学习·算法
xier_ran1 小时前
【infra之路】从“三堵叹息之墙”到异构计算的狂飙
开发语言·c++·算法