数据结构与算法刷题之【堆】篇
<p>汇总堆(优先队列)相关的数据结构与算法刷题笔记,包含剑指offer与牛客网高频题目,讲解数据流中位数、TopK等问题的大顶堆与小顶堆解法及Java代码实现,总结堆在求中位数与TopK场景下的应用技巧。</p>
<p>汇总堆(优先队列)相关的数据结构与算法刷题笔记,包含剑指offer与牛客网高频题目,讲解数据流中位数、TopK等问题的大顶堆与小顶堆解法及Java代码实现,总结堆在求中位数与TopK场景下的应用技巧。</p>
<p>本文讲解 LeetCode 第 2336 题「无限集中的最小数字」,实现移除最小元素与回添元素两种操作。使用小顶堆维护已回添元素,并以阈值变量 thres 表示未添加的连续正整数,配合 vis 数组保证元素唯一性,附 Java 实现。</p>
<p>本文讲解 LeetCode 第 2462 题「雇佣 K 位工人的总代价」,每轮从前 candidates 与后 candidates 名工人中选取最小代价者。使用最小堆存储值、索引与左右标记,配合双指针动态补充候选工人,时间复杂度 O(n log n),附 Java 代码。</p>
<p>本文讲解 LeetCode 第 2542 题「最大子序列的分数」,从两数组各取 k 个下标使 nums1 之和乘以 nums2 最小值最大。先按 nums2 降序排序索引,再用小顶堆维护 nums1 的 k 个最大和,时间复杂度 O(n log n),附 Java 代码。</p>
<p>本文讲解 LeetCode 347 前 K 个高频元素,返回出现频率最高的 k 个元素。文章给出题目描述与调试代码,介绍用哈希表统计频率后配合小顶堆维护前 k 个的解法,以及先排序再遍历入优先队列的第二种实现思路。</p>