优先队列/大小顶堆

int类型

priority_queue<int, vector<int>, less<int>> pq;  // 最大堆
priority_queue<int, vector<int>, greater<int>> pq;  // 最小堆

非int类型 

  • 方法1 重载()

    struct cmp{
        bool operator()(ListNode* a, ListNode* b){
            return a->val > b->val;
        }
    };
// priority_queue自定义函数的比较与sort正好是相反的
// 也就是说,如果你是把大于号作为第一关键字的比较方式,那么堆顶的元素就是第一关键字最小的
    priority_queue<ListNode*, vector<ListNode*>, cmp> pq; 
// 此时pq就按照节点的值将最小的放在堆顶
  • 方法2 重载<

    struct Status{
        int val;
        ListNode* node;
        bool operator < (const Status &tmp) const{ 
        // 函数必须是静态的 使得该函数可以被 const 对象也就是常量所调用
        // 形参可以加上const关键字和&,保证安全性,提高效率
            return val > tmp.val;
        }
    };
    priority_queue<Status> pq;  
  • 方法3 利用友元函数重载<

    struct Status{
        int val;
        ListNode* node; 
        friend bool operator<(Status a, Status b)  // 形参可以加上const关键字和&,保证安全性,提高效率
        {
            return a.val > b.val;
        }
    };
    priority_queue<Status> pq; 

单调栈与优先队列的区别

 单调栈底层数据结构:栈; 优先队列底层数据结构:二叉堆(完全二叉树,满足最值堆);

数据结构主要特点时间复杂度支持随机访问支持插入/删除位置
单调栈维护数组下标进行排列。O(n)不支持一端插入/删除
优先队列维护一组元素,支持查找和删除最大(最小)元素O(log n)支持任意位置插入/删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值