实现能够返回最小值元素的栈(每日一道算法题)
来源:互联网 发布:淘宝古装知乎 编辑:程序博客网 时间:2024/05/16 07:59
实现能够返回最小值元素的栈
package stack;import java.util.Stack;/** * @author:MindMrWang *2017年11月11日 *:function:实现一个特殊的栈,在实现栈基本功能的基础上,再返回栈中最小元素的操作 * pop push getMin 时间复杂度都是O(1),实现栈的类型可以使用现成的栈结构。 */public class MyStack1 { private Stack<Integer> stackDate;//存值 private Stack<Integer> stackMin;//存最小值 public MyStack1() { this.stackDate=new Stack<Integer>(); this.stackMin=new Stack<Integer>(); } //push方法 public void push(int newNum) { //当stackMin为空的时候,将新值存入stackMin(只执行一次) if(this.stackMin.isEmpty()) { this.stackMin.push(newNum); } else if (newNum<=this.getmin()){//当新值小于等于最小值时,将新值存入stackMin this.stackMin.push(newNum); } this.stackDate.push(newNum);//每次必将值存入stackDate } public int pop() { //判断stackDate是否为空 if(this.stackDate.isEmpty()) { throw new RuntimeException("your stack is empty"); } //获得stackDate栈顶元素 int value=this.stackDate.pop(); //如果这个值等于stackMin的栈顶元素将stackMin pop if(value==this.stackMin.peek()) { this.stackMin.pop(); } return value; } public int getmin() { if(this.stackMin.isEmpty()) { throw new RuntimeException("your stack is empty"); } return this.stackMin.peek(); }}
package stack;import java.util.Stack;/** * @author:MindMrWang *2017年11月12日 *:function:同上 */public class MyStack02 { private Stack<Integer> stackDate; private Stack<Integer> stackMin; public MyStack02() { this.stackDate = 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{ this.stackMin.push(this.getMin()); } this.stackDate.push(newNum); } public int pop() { if(this.stackDate.isEmpty()) { throw new RuntimeException("your stack is Empty"); } this.stackMin.pop(); return this.stackDate.pop(); } public int getMin() { if(this.stackDate.isEmpty()) { throw new RuntimeException("your stack is empty"); } return this.stackMin.peek(); }}
方案一压入省空间,且省时间,弹出时稍费时间,方案二压入时候稍费时间,弹出时省时间。
阅读全文
1 0
- 实现能够返回最小值元素的栈(每日一道算法题)
- 每日一道算法题2——定义一个栈,提供一个返回栈里最小元素方法
- 用栈实现队列(每日一道算法题)
- 每日一题——实现取最小值的栈
- 用一个栈实现另一个栈的排序(每日一道算法题)
- 【每日一道算法题】
- 【每日一道算法题】
- 【每日一道算法题】
- 【每日一道算法题】
- 【每日一道算法题】
- 【每日一道算法题】
- 每日一道算法题:求一个矩阵中最大的二维矩阵(元素和最大)
- 每日一道算法题7—— 查找最大(小)的k个元素
- 实现一个返回最小值的栈
- 每日一道算法题:编程实现两个数的除法,当然不能用除法操作符
- 每日一道算法题:两个数组的交集
- 每日一道算法题:求N个整数的最大公约数
- 构造数组的MaxTree(每日一道算法题)
- linux下使用谷歌——————满满的心酸史
- 机器人学中旋转矩阵与欧拉角之间互换公式及程序
- 【Spring】AOP概述
- spring各种jar包及其功能
- OpenCV样本训练经验
- 实现能够返回最小值元素的栈(每日一道算法题)
- 设计模式【访问者模式VisitorPattern】
- 2017CCPC哈尔滨 A:Palindrome(manacher+树状数组)
- 参考ethtool写了个Linux设置、获取网卡模式的接口
- IPv4协议笔记
- [Unity基础]Unity本地存储--Sqlite数据库
- USB小票打印解决办法
- CCPC.2017 哈尔滨站-重现赛-H(暴力+贪心)
- select函数总结