AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

STL之优先队列

作者: 作者的头像   烟花易冷 ,  2020-07-31 00:28:04 ,  所有人可见 ,  阅读 1215


1


自己综合了一些大佬的代码,做个笔记。
其实就是复习一下。。。
整理STL偷懒,现在就遇到了。。。

// 优先级队列Priority Queue

#include <bits/stdc++.h>
using namespace std;

// 适配器容器 

// 利用堆实现

//创建

priority_queue<int> values; 

int values[]{4,1,3,2};                                                          // 普通数组初始化 
priority_queue<int> copy_values(values, values+4);                              // {4,2,3,1}
array<int,4> values{ 4,1,3,2 };                                                 // 序列式容器初始化 
priority_queue<int> copy_values(values.begin(), values.end());                  // {4,2,3,1}

int values[]{ 4,1,2,3 };                                                        // 手动指定排序规则和底层容器 
priority_queue<int, deque<int>, greater<int> > copy_values(values, values+4);   // {1,3,2,4}

//方法

Heap.empty();
Heap.push();
Heap.pop();
Heap.top();
Heap.size();

priority_queue.png
54题
54.png

54题题解
class Solution {
public:
    void insert(int num){
        maxHeap.push(num);//推n入大顶堆
        if(maxHeap.size() > minHeap.size() + 1)//大顶堆比小顶堆+1大
        {
            int t = maxHeap.top();//t=最大值
            maxHeap.pop();//删除最大值
            minHeap.push(t);//推入小顶堆
        }
        while(minHeap.size() && maxHeap.top() > minHeap.top())//大顶堆最大值 比 小顶堆最小值大 且 小顶堆存在
        {
            int t1 = maxHeap.top();//交换两个极值
            int t2 = minHeap.top();
            maxHeap.pop(); maxHeap.push(t2);
            minHeap.pop(); minHeap.push(t1);
        }
    }
    double getMedian(){
        int n1 = minHeap.size();
        int n2 = maxHeap.size();
        if(n1 == n2) return (minHeap.top() + maxHeap.top()) / 2.0;//输出大顶堆最大值与小顶堆最小值的平均数,即中位数
        else return maxHeap.top();
    }
private:
    priority_queue<int> maxHeap;//优先队列声明大顶堆
    priority_queue<int, vector<int>, greater<int>> minHeap;//优先队列声明小顶堆
    //int-数据类型,vector<int>-数据容器,greater<int>-仿函数声明用于小顶堆
};
参考资料

https://www.acwing.com/solution/content/1665/
https://blog.csdn.net/txl16211/article/details/44588487
http://c.biancheng.net/view/6987.html
54题链接
https://www.acwing.com/problem/content/88/

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息