栈和队列——设计一个有getMin功能的栈(二)
2017-08-29 21:05
399 查看
【题目】
设计一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作
【要求】
1、pop、push、getMin操作的时间复杂度都是O(1)
2、设计的栈类型可以使用现成的栈结构
【代码实现】
【解析】
这一篇和上一篇的两种对于此问题的解法其实都是用了另一个栈stackMin来保存stackData中的最小值,共同点是所有操作的时间复杂度都是O(1)、空间复杂度都是O(n)。区别是(一)的方案stackMin压入稍省空间,弹出操作稍费时间,(二)的方案stackMin压入稍省费空间,但是弹出稍省时间
设计一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作
【要求】
1、pop、push、getMin操作的时间复杂度都是O(1)
2、设计的栈类型可以使用现成的栈结构
【代码实现】
import java.util.Stack; 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); } } //出栈 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(); } }
【解析】
这一篇和上一篇的两种对于此问题的解法其实都是用了另一个栈stackMin来保存stackData中的最小值,共同点是所有操作的时间复杂度都是O(1)、空间复杂度都是O(n)。区别是(一)的方案stackMin压入稍省空间,弹出操作稍费时间,(二)的方案stackMin压入稍省费空间,但是弹出稍省时间
相关文章推荐
- 算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈
- (一)栈和队列--设计一个有getMin功能的栈 java实现
- 栈和队列——设计一个有getMin功能的栈(一)
- 1_1栈和队列_设计一个有Getmin功能的栈
- 1栈和队列--设计一个有getMin功能的栈
- 栈和队列---设计一个有getMin功能的栈
- 栈和队列 设计一个有getMin()功能的栈
- 栈和队列之设计一个有getMin(得到最小值)功能的栈
- 算法--设计一个有getMin功能的栈
- [算法最优]设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 栈和队列(1)——一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个具有getMin()功能的栈
- 设计一个有getMin功能的栈 程序员代码面试指南
- 算法与数据机构学习_第一章.栈和队列_1.设计一个有返回栈中最小元素功能的栈
- 有一个任务队列,分别有A、B、C三种类型的任务,设计一种功能,让三种任务分别按照x:y:z(具体比例可配置)的比例进行执行