首先,对于栈,实现其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