设计一个带有getMin功能的栈

来源:互联网 发布:数据分析专业 大学 编辑:程序博客网 时间:2024/05/16 08:02

题目:

        实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。


要求:

        1,pop, push, getMin操作的时间复杂度都是O(1).


注:

        1, 设计的栈类型可以使用现有的栈结构。


思路:

        可以考虑使用两个栈来进行设计,一个栈用来保存当前栈中的元素,其功能和一个正常的栈没有区别,这个栈记为stackData;另一个栈用于保存每一步的最小值,这个栈记为stackMin。


代码:

思路一:

public class MyStack1 {private Stack<Integer> stackData; // 同正常栈功能private Stack<Integer> stackMin; //用于保存每一步的最小值public MyStack1() {this.stackData = new Stack<Integer>();this.stackMin = new Stack<Integer>();}public void push(int newNum) {if (this.stackMin.isEmpty()) {this.stackMin.push(newNum);} else if (newNum <= this.getmin()) {this.stackMin.push(newNum);}this.stackData.push(newNum);}public int pop() {if (this.stackData.isEmpty()) {throw new RuntimeException("Your stack is empty.");}int value = this.stackData.pop();if (value == this.getmin()) {this.stackMin.pop();}return value;}public int getmin() {if (this.stackMin.isEmpty()) {throw new RuntimeException("Your stack is empty.");}return this.stackMin.peek();}}


思路二:

public class MyStack2 {private Stack<Integer> stackData;private Stack<Integer> stackMin;public MyStack2() {this.stackData = new Stack<Integer>();this.stackMin = new Stack<Integer>();}public void push(int newNum) {if (this.stackMin.isEmpty()) {this.stackMin.push(newNum);} else if (newNum < this.getmin()) {this.stackMin.push(newNum);} else {int newMin = this.stackMin.peek();this.stackMin.push(newMin);}this.stackData.push(newNum);}public int pop() {if (this.stackData.isEmpty()) {throw new RuntimeException("Your stack is empty.");}this.stackMin.pop();return this.stackData.pop();}public int getmin() {if (this.stackMin.isEmpty()) {throw new RuntimeException("Your stack is empty.");}return this.stackMin.peek();}}
我们一起努力吧,QQ群(478705720)海量的书籍,视频,源码资料,丰富的求职内推信息,分享给正在努力奋斗的你!成功路上,我们风雨同行!

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 溯流文艺时代 文娱从少年中国说开始 从水浒开始:我的蛙崽给力 原神之璃月道人 和离后,我带着战神王爷去种田 快穿宿主她过分迷人 从夜老虎侦察连开始 巫界征途 诸天盗梦者 霍格沃茨疾风传 这个世界有大可怖 校草的小祖宗甜翻了 重生之玩转金融界 一人之下:天下第一贼 重生之造富年代 NBA之开局抽到暮年奥尼尔 代管夜老虎连,全成特种部队了 我:大明战神朱祁镇 黑光病毒:侵略多元宇宙 毁灭日,从一代宗师开始 从时间停止开始纵横诸天 司少的心尖宠太娇啦! 洪荒:从一方残印到阵道源祖 别让玉鼎再收徒了 星际争霸之崛起的人族 我有一座无敌城 豪门大小姐她一心只想修仙 替嫁后,植物人老公竟是热恋男友 全民修仙:证道成圣 救世主聊天群 反派的我正全力阻止她们黑化 攻掠天下 备前宰相 殿下别这样 春色满汴梁 我被困在惊悚游戏一百年 洪荒:拔剑千年,开启人族时代 超神学院之天使冰华 快穿:茶系美人她蛮力爆表 灵气复苏从武侠开始 清穿直播后我靠美食火了