【剑指offer】包含min函数的栈

时间:2021-08-15 22:52:38

首先第一个想到用一个临时变量何存当前栈中的最小值。每次入栈时,先比较入栈元素与当前最小值确定是否更新。但是如果此时出栈一个元素,并且栈内不为空时,min函数就无法工作了。也就是说我们必须保存入栈前的最小值序列,以保证出栈后能恢复最小值。很容易想到也用一个栈来保存最小值。

public class MinStack<T extends Comparable<? super T>>{
private Stack<T> elements=new Stack<T>();
private Stack<T> min=new Stack<T>();

public MinStack(){
}

public void push(T t) {
elements.push(t);
if(min.size()==0||t.compareTo(min.peek())<0){
min.push(t);
}else{
min.push(min.peek());
}
}

public T pop() {
min.pop();
return elements.pop();
}

public T peek() {
return elements.peek();
}

public T min() {
return min.peek();

}
}