实现能够返回最小值元素的栈(每日一道算法题)
2017-11-11 17:34
288 查看
实现能够返回最小值元素的栈
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(); } }
方案一压入省空间,且省时间,弹出时稍费时间,方案二压入时候稍费时间,弹出时省时间。
相关文章推荐
- 每日一道算法题2——定义一个栈,提供一个返回栈里最小元素方法
- 每日一道算法题:Google 2009年某笔试题:求出元素位于0到9之间的集合A中大于某个给定正整数K的组成的最小正整数。
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数
- 用一个栈实现另一个栈的排序(每日一道算法题)
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 构造一个特殊栈,实现方法getmin,返回栈中的最小元素 Python版
- 查找最小的k 个元素之C#算法实现
- cc150:实现一个算法从一个单链表中返回倒数第n个元素
- C语言 选择排序算法原理和实现 从数组中 找出最小的元素然后交换位置
- 剑指offer——定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 算法代码实现之选出第k小元素、中位数、最小的k个元素(线性复杂度),C/C++实现
- 008实现一个算法从一个单链表中返回倒数第n个元素(keep it up)
- 一、实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作
- 每日一道算法题:a~z包括大小写与0~9组成的N个数,用最快的方式把其中重复的元素挑出来。
- 每日一道算法题7—— 查找最大(小)的k个元素
- 每天一道算法题4 查找最小的k个元素
- 算法实验一:二分查找算法改进: 当搜索元素x不存在时,返回小于x的最大元素位置i和大于x的最小元素位置j. 当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
- 输入一个整数数组,返回所有元素两两之差绝对值最小的值,O(n)算法
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 算法与数据机构学习_第一章.栈和队列_1.设计一个有返回栈中最小元素功能的栈