博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode155-最小栈(优先队列/巧妙的解法)
阅读量:6786 次
发布时间:2019-06-26

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

看起来挺简单,但是写起来才有坑。

模仿java里面的栈

1、用数组存放元素

2、设置size和index,push和pop只需要移动index就好了,不需要处理元素。

3、初始化为16,如果满了要扩容到2倍,为了偷懒,数组只增不减。

 

最后就是处理min的问题,原来想着提供一个min变量,每次插入的时候更新min即可。

但是如果刚好pop了一个min呢?上一个min是多少?

当然可以使用一个secondMin变量,但是连续pop两个呢?上上个呢?

所以使用变量不行。

因为只需要在获取的时候是常数,维护min不做限制,那么使用优先队列就好了。

注意在pop的时候,要注意pop的是不是最小值,是的话有限队列也要poll

 

没进行出错处理,比如pop到负数,但是题目本身也没这样的操作。过了

class MinStack {    int size;        int index;        //只有一个min,或者两个min,不能实现该功能        //如果pop了一个min,没法获取之前的最小值了        //使用最小堆就好了        PriorityQueue
min; int [] array; /** initialize your data structure here. */ // 初始化给16 public MinStack() { size = 16; index = 0; array = new int [16]; min = new PriorityQueue<>(); } public void push(int x) { //扩容 if(index==size-1){ size*=2; int [] temp = new int [size]; int ori = size/2; for(int i=0;i

 

 

 

排第一的答案很有趣!是自定义的数据结构来维护min值!

使用了一个栈来保存Pair

 

Pair是当前值val对应的min值

 

每次push的时候更新min值,然后创建Pair,压栈

 

因为用的是栈,就算是同一个数字,后入和先入的也能区分不同的min。

而且这个栈st和题目要求的栈刚好可以同步pop,也算巧妙吧!

转载于:https://www.cnblogs.com/weizhibin1996/p/9457353.html

你可能感兴趣的文章
常用Shell脚本命令(备忘)
查看>>
Python中的__init__,__call__
查看>>
玩转Kafka的生产者
查看>>
解决android.permission.WRITE_APN_SETTINGS
查看>>
Ruby on Rails: UUID as your ActiveRecord primary key
查看>>
Bean property属性说明
查看>>
微软工程师认为 Mozilla 也应该拥抱 Chromium
查看>>
去年出货的工业机器人,超过1/3都跑来了中国
查看>>
Windows死机的话,可能的一些猫病
查看>>
作为架构师,你必需要搞清楚的概念:POJO、PO、DTO、DAO、BO、VO
查看>>
golang-web框架revel一个表单提交的总结
查看>>
PHP 根据IP获取地理位置
查看>>
如何设置同一单据的单据头字段各行合并显示吗?
查看>>
HAProxy负载均衡代理
查看>>
Velocity入门指南
查看>>
LNMP架构搭建论坛(三)
查看>>
有关jdk和oracle和eclipse问题
查看>>
为什么 Redis 单线程能支撑高并发?
查看>>
程序员都会的 35 个 jQuery 小技巧
查看>>
2019年全国各地挖掘机司机(机手)工资待遇怎样?
查看>>