博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA136有关优先队列
阅读量:4879 次
发布时间:2019-06-11

本文共 850 字,大约阅读时间需要 2 分钟。

其实优先队列是个伪命题,因为优先队列完全可以由集合set来代替,因为集合中的元素一定是从小到大依次排列的,取出最小或者最大的元素后,再使用erase(),将取出的元素删掉。

优先队列比集合多出的一个功能是可以找到第一个进入优先队列的元素,但这也是个伪命题,因为第一个进队列的也可能是优先级最大的,然后再某一次取数中就被取出去了。

最后再来说说丑数这道题。

从集合(pq)中取出最小的数,依次乘以2,3,5,放入另一个集合(set)中,然后再冲pq中取出最小的数,再乘一次放入set中。同时这些乘出来的新的丑数必须也放到(pq)当中去,以便下次取出最小数。

这个地方就有个很有趣的东西了,如果使用优先队列,那么往优先队列中放新的丑数的时候,必须判断之前有没有放过这个数,否则就会放到里面两个。

然后使用集合构成的优先队列时,不需要这么干,因为集合中的元素唯一。

下面贴出使用集合构成的优先队列的解决丑数问题的代码:

#include
#include
#include
#include
#include
using namespace std;typedef long long LL;//priority_queue
,greater
> pq;set
Set;set
pq;int main(){ Set.insert(1); pq.insert(1); for(int i=1;;i++) { LL x=*pq.begin(); pq.erase(x); if(i==1500) { cout<
<

最近特别的焦虑,特别的焦虑,痛恨之前的自己。

转载于:https://www.cnblogs.com/TorettoRui/p/10420060.html

你可能感兴趣的文章
【python cookbook】【数据结构与算法】15.根据字段将记录分组
查看>>
spring的静态代理和动态代理
查看>>
springboot项目怎么部署到外部tomcat
查看>>
转载 官场做人 学习一下.
查看>>
2012r2 以及 2012r2 withupdate 已经安装更新的差异
查看>>
[转帖]dd命令详解
查看>>
ios 屏幕旋转
查看>>
block的一点知识
查看>>
python基础知识——包
查看>>
Try | Just the way you are
查看>>
nginx中的红黑树
查看>>
归并排序
查看>>
IActionResult的返回类型
查看>>
响应式WEB设计测试好工具
查看>>
.getClass();
查看>>
关于mybatis配置文件mapper传int值的问题
查看>>
HDU5542 BIT优化dp
查看>>
HDU 1166 敌兵布阵(线段树 or 二叉索引树)
查看>>
snapkit equalto和multipliedby方法
查看>>
Nhibernate 一对一关系映射(主键映射)
查看>>