要求:实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。

注意事项:如果堆栈中没有数字则不能进行min方法的调用。

样例:如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1

思路:我们使用两个stack栈来操作,一个保存数据,一个保存最小值(找到相等的和更小的就加进去),值得注意的是,没有元素的时候,无论第一个压进栈的元素是多大,最小值的堆栈都要压进去,出栈的时候如果只剩下一个元素,也是要特殊处理的。

代码如下:

 

public class MinStack {    public Stackdata=new Stack<>();//保存数据的栈    public Stackmin=new Stack<>();//保存最小值得栈    public MinStack() {        // do initialize if necessary    }    public void push(int number) {//压栈操作        // write your code here        data.push(number);        if(min.size()==0||min.lastElement()>=number){//当该数小于最小值的时候,或者堆栈里面没有数的时候,我们将它压进去。            min.push(number);        }    }    public int pop() {        // write your code here        if(data.size()>0){//数据栈大小不为0            int t=data.lastElement();//得到最小值            if(data.size()==1) {//只剩下一个元素,数据栈要出栈,最小值也是                data.pop();                min.pop();            }else{                data.pop();数据栈出栈                if(min.lastElement()==t){//最小值不一定要出栈                    min.pop();                }            }            return t;        }else//数据栈为空            return 0;    }    public int min() {        // write your code here        if(min.size()>0&&data.size()>0)            return min.lastElement();        else            return 0;    }}

如果有所帮助,脸皮厚求个赞~

此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~

技术之路不在一时,山高水长,纵使缓慢,驰而不息。

公众号:秦怀杂货店

 

 

 

 

©著作权归作者所有:来自51CTO博客作者秦怀杂货店的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 数据库的简单操作
  2. (六)高并发redis学习笔记:redis的RDB持久化机制配置以及数据恢复的
  3. MySQL使用mysqldump+binlog完整恢复被删除的数据库
  4. 使用binlog2sql工具来恢复数据库
  5. 架构设计:数据服务系统0到1落地实现方案
  6. MySQL闪回工具--MyFlash
  7. 日志易AIOps实践:日志数据大有用途
  8. 金融行业新核心系统建设及同城应用级双活若干难点解读
  9. 备份软件老矣?存储新风口——超融合第二存储来了

随机推荐

  1. XML指南——察看 XML 文件
  2. XML指南——XML数据岛
  3. XML指南——XML 属性
  4. XML卷之实战锦囊(4):选单连动
  5. XML指南——XML编码
  6. XML卷之实战锦囊(3):动态分页
  7. XML(6)自己写一个xml序列化器
  8. XML卷之实战锦囊(2):动态查询
  9. XML(5)序列化写入xml文件
  10. XML卷之实战锦囊(1):动态排序