class MinStack {
//声明两个栈 A为数据栈,B为辅助栈
Stack<Integer> A,B;
public MinStack() {
//初始化栈
A = new Stack<>();
B = new Stack<>();
}
public void push(int x) {
A.add(x);
//保证栈B非严格降序排列,一定要写成小于等于,不然会有B为空栈的现象
if(B.empty() || x<=B.peek()){
B.add(x);
}
}
public void pop() {
//当A的栈顶等于B的栈顶时B才出栈,否则只有A出栈,这样能保证A和B同时出完栈即在找最小值的过程中不会出现B为空栈的情况。
if(A.pop().equals(B.peek())){
B.pop();
}
}
public int top() {
return A.peek();
}
public int min() {
return B.peek();
}
}