![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
优先队列/堆
。
algsup
这个作者很懒,什么都没留下…
展开
-
[贪心+优先队列]leetcode871:最低加油次数(hard)
题目:题解:代码如下:原创 2022-07-02 09:31:50 · 318 阅读 · 0 评论 -
[浮点数][堆]leetcode2208:将数组和减半的最少操作次数(medium)
题目:题解:代码如下:原创 2022-06-08 10:05:39 · 685 阅读 · 0 评论 -
[小根堆]leetcode6039: K 次增加后的最大乘积(medium)
题目:题解:思路:首先将数组中所有元素加入小根堆中,然后进行 k 次取堆顶元素+1,由于 k 的范围最大只有 1e5,所以循环 k 次;当 k 的范围过大时,会出现超时现象,因此可以使用优化的方法,每次在堆顶取最小值和次最小值,来让最小值尽快地增加到距离次最小值最近的位置,来避免浪费时间。代码如下:// 原生代码const int mod = 1e9+7;using LL = long long;class Solution {public: // 给x加1,其实原创 2022-04-10 20:11:45 · 409 阅读 · 0 评论 -
[优先队列]leetcode692:前K个高频单词(medium)
题目:题解:思路:经典的 top-k,所以在建立字符串的计数后,使用 sort 排序或维护大小 k 的小根堆都可以。代码如下:using PSI = pair<string,int>;bool cmp(const PSI& a,const PSI& b){ return a.second==b.second?a.first<b.first:a.second>b.second;}class Solution {public: /原创 2022-02-21 22:13:16 · 274 阅读 · 0 评论 -
[优先队列]leetcode347:前 K 个高频元素(medium)
题目:题解:思路:利用 top-k 的思路先将数组的所有元素建立 <元素,该元素个数> 的映射,然后开始向小根堆中插入元素了。若此时堆的大小不足 k,则直接将遍历到的 pair 加入堆中;若此时堆的大小刚好等于 k,那么判断当前遍历到的元素出现的次数 cnt 是否大于堆顶元素的次数,若大于则堆顶元素出堆,加入当前遍历到的元素。代码如下:using PII = pair<int,int>;// 由于优先队列前面的元素优先级最高,所以现在的次数最大表示优先队列后面的元原创 2022-02-20 19:02:48 · 398 阅读 · 0 评论 -
[大根堆]面试题40. 最小的k个数(easy)
题目:题解:大根堆模板题,维持一个大小为 k 的大根堆就可得到数组前 k 个最小数了。代码如下:class Solution {public: vector<int> getLeastNumbers(vector<int>& arr, int k) { if(!k)return {}; priority_q...原创 2020-03-20 00:29:31 · 411 阅读 · 0 评论 -
[堆]leetcode295:数据流的中位数(hard)
题目:题解:双堆法(大根堆、小根堆)对于快速寻找寻找动态数组的中位数,我们可以使用两个堆来解决。我们使用一个大根堆来存放“前有序数组”,大根堆的堆顶元素为“前有序数组”的最大值;使用一个小根堆来存放“后有序数组”,小根堆的堆顶元素为“后有序数组”的最小值。注意,我们需要控制小根堆的大小要等于大根堆的大小或者比其多1,因为这样我们可以通过二者的大小来快速确定中位数。对于每次添加元素值...原创 2019-12-21 20:05:14 · 283 阅读 · 1 评论 -
[堆]leetcode215:数组中的第K个最大元素(medium)
题目:题解:题解1:STL算法题解2:维持一个大小为k的小根堆,堆顶元素就是数组中第k个最大的元素代码如下:class Solution {public: //题解1:利用sort排序直接返回第k大的元素 int findKthLargest_1(vector<int>& nums, int k) { sort(nums.b...原创 2019-11-22 15:07:50 · 270 阅读 · 0 评论