设计一个栈,支持O(1)的min方法
来源:互联网 发布:泰安知金乱收费 编辑:程序博客网 时间:2024/04/28 11:52
首先,对于栈,实现其min方法很简单,就是每次push一个值的时候,对minValue进行维护:
if(value < minVlaue){ minValue = value;}
每次调用min() 时直接返回minValue即可。但是,如果pop走的是minValue则需要遍历剩下的元素求最小值。所以这样无法满足O(1)的要求,我们需要额外的空间保存栈的每一个状态下的最小值。
正如上面陈述的,只要当push的值小于minValue时和pop的值等于minValue时才需要进行额外的操作,用额外的一个栈stackOfMin来记录最小值的情况。当push的值小于minValue时,stackOfMin push新的最小值;pop的值等于minValue时,stackOfMin也相应地pop就行。
代码
package test1;import java.util.Stack;public class StackWithMin extends Stack<Integer>{ private Stack<Integer> stackOfMin; public StackWithMin() { stackOfMin = new Stack<>(); } public int min() { if(stackOfMin.isEmpty()){ return Integer.MAX_VALUE; }else { return stackOfMin.peek(); } } @Override public Integer push(Integer item) { if(item < min()){ stackOfMin.push(item); } return super.push(item); } @Override public synchronized Integer pop() { if(this.peek() == min()){ stackOfMin.pop(); } return super.pop(); } public static void main(String[] args) { StackWithMin stackWithMin = new StackWithMin(); stackWithMin.push(19); System.out.println("The min is: "+stackWithMin.min()); stackWithMin.push(15); System.out.println("The min is: "+stackWithMin.min()); stackWithMin.push(17); System.out.println("The min is: "+stackWithMin.min()); stackWithMin.pop(); System.out.println("The min is: "+stackWithMin.min()); stackWithMin.pop(); System.out.println("The min is: "+stackWithMin.min()); stackWithMin.push(30); System.out.println("The min is: "+stackWithMin.min()); stackWithMin.push(1); System.out.println("The min is: "+stackWithMin.min()); stackWithMin.push(4); System.out.println("The min is: "+stackWithMin.min()); }}
输出
The min is: 19The min is: 15The min is: 15The min is: 15The min is: 19The min is: 19The min is: 1The min is: 1
0 0
- 设计一个栈,支持O(1)的min方法
- 设计一个栈含有min()方法的栈,时间复杂度o(1)
- 设计一个栈,除了pop push 还支持Min,时间复杂度都为o(1);
- 【Java】设计一个栈,并且push,pop和min三个方法的时间复杂度必须为O(1)
- 经典面试题:设计包含min函数的栈,O(1)空间实现方法
- 设计包含min函数的栈,O(1)空间实现方法
- 经典面试题:设计包含min函数的栈,O(1)空间实现方法
- 经典面试题:设计包含min函数的栈,O(1)空间实现方法
- 程序员面试金典: 9.3栈与队列 3.2设计一个栈,除pop与push方法,支持返回栈最小元素min方法,时间复杂度均为O(1)
- 设计一个带MIN的栈,要求出栈,入栈,返回最小值的时间复杂度为O(1)
- 设计一个包含pop,push,min在内的栈,并且各个函数的时间复杂度均为o(1)
- 设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)
- 设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)。
- 设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)
- 设计一个堆栈,函数min、push 以及pop 的时间复杂度都是O(1)
- 数据结构---设计一个栈,push, pop, min 时间复杂度都是 O(1)
- 设计一个栈,push, pop, min 时间复杂度都是 O(1)
- 设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1)
- DB2 LOAD 工具使用技巧集合
- 插入与归并(25)
- MJPG-Streamer及使用---fwqlzz love is for ever
- bzoj4069【APIO2015】巴厘岛的雕塑
- WHU 1622 (哈希)
- 设计一个栈,支持O(1)的min方法
- 京东和360面经
- bzoj4070【APIO2015】雅加达的摩天楼
- JVM学习心得
- dd备份恢复系统
- mysql JDBC驱动下载
- 游戏底层逻辑,运动&&寻路(五)
- Bootstrap VS Semantic VS Foundation
- dd通过网络克隆硬盘或者备份