设计一个有getMin功能的栈
2017-02-26 11:43
351 查看
设计一个有getMin功能的栈
【题目】
实现一个特殊的栈,在实现基本的栈功能的基础上,再实现返回栈中最小元素的操作【要求】
pop、push、getMin的操作时间复杂度都是O(1)设计的栈类型可以使用现成的栈结构
【解决思路】
在设计上,我们使用两个栈来解决问题,使用空间换取时间复杂度上的最优解。一个栈用来存储我们当前栈中最小的元素;另外的一个栈用来实现我们的基本栈的操作,存储基本数据。数据压栈规则
假设,当前要压入栈的数据为newNum,先将其压入到stackData.然后判断stackMin是否为空:
1.如果为空:则将newNum压入到minStack
2.如果不为空,则将newNum和minStack栈顶的数据进行比较,如果比它小,则把newNum压入到minStack中去
数据出栈规则
先从stackData中执行出栈操作,取出数据,然后将这个数据和当前最小数据进行比较,如果当前出栈的数据是当前最小数据,则在minStack也进行出栈即可。
【代码实现】
package study0224; import java.util.Stack; public class MyStrack1 { private Stack<Integer> strackData; private Stack<Integer> minData; public MyStrack1() { this.strackData = new Stack<Integer>(); this.minData = new Stack<Integer>(); } public void push(Integer newNum) { if (strackData.isEmpty()) { strackData.push(newNum); minData.push(newNum); } else { strackData.push(newNum); if (this.getMin() > newNum) { minData.push(newNum); } } } public int pop() { int popNum = strackData.pop(); if(popNum == this.getMin()) { minData.pop(); } return popNum; } public int getMin() { if (this.minData.isEmpty()) { throw new RuntimeException("min stack is null"); } return minData.peek(); } }
相关文章推荐
- 栈和队列 设计一个有getMin()功能的栈
- 设计一个有getMin功能的栈
- Stack介绍以及设计一个有getMin 功能的栈
- 算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈
- 设计一个有getMin(),push(),pop().功能的栈
- 左神的书——《程序员代码面试指南》之设计一个有getmin功能的栈 c++实现
- 设计一个getMin功能的栈,如果面试官让你写一个数组类,一定不要用指针去管理new出来原生的数组,那就是在给自己挖坑
- 设计一个有getMin功能的栈
- 设计一个具有GetMin功能的栈
- 栈和队列---设计一个有getMin功能的栈
- 栈和队列——设计一个有getMin功能的栈(一)
- 设计一个有getMin功能的栈
- 栈和队列之设计一个有getMin(得到最小值)功能的栈
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈 程序员代码面试指南
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 算法--设计一个有getMin功能的栈
- 设计一个带有getMin功能的栈