首先第一个想到用一个临时变量何存当前栈中的最小值。每次入栈时,先比较入栈元素与当前最小值确定是否更新。但是如果此时出栈一个元素,并且栈内不为空时,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();
}
}