关于优先队列在算法中的使用(通常结合延迟删除)——也是延迟删除思想的学习

优先队列

​​  优先队列可以在常数时间内取出一个序列的最大值或最小值,以对数阶的时间复杂度插入任意值。但是注意最大值优先队列只能取最大值,而最小值优先队列只能取最小值。

优先队列在算法中的使用新得

​​  而在算法中的使用优先队列通常不会仅仅取出序列的最值,有时候还会让你删除优先队列的任意值(当然这是没法做到的,这是由优先队列的特点决定的)。而在 Leetcode 的天际线滑动窗口最大值问题的使用优先队列的解中都会提到 “从优先队列中将该值删除” ,这又是为什么呢?
​​  因为这不是真正意义上的删除,而是一种特殊思想 延迟删除——需要保证该值对后续值没有影响后才能出优先队列(这是延迟思想+优先队列的实质)
​​  换到实际问题,比如天际线,使用 pair<int, int> 保存建筑的最高值和右边缘的 x 坐标——以此来表示一条线段。当遇到建筑的右边缘时,优先队列要取出最大值进行比较时,先判断优先队列该最大值是不是有效的线段(即最大值的 x 坐标是否大于等于该点的 x 坐标,是则有效)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值