1.思路:设置两个栈A和B,A存储所有元素,B存储的是小于等于A入栈的第一个元素,且按非递增顺序排列,这就保证了B的栈顶元素是最小元素
2.代码:
class MinStack {
Stack<Integer>A;
Stack<Integer>B;
/** initialize your data structure here. */
public MinStack() {
A = new Stack();
B = new Stack();
}
public void push(int x) {
A.add(x);
//如果B为空或者当前元素小于等于B的栈顶元素,则将元素入栈
if(B.isEmpty() || x <= B.peek())
B.add(x);
}
//将A的元素出栈,同时,若该元素与B的栈顶元素相等,将B的栈顶元素也出栈,因为B存储的是小于等于A入栈的第一个元素,且按非递增顺序排列,这就保证了B的栈顶元素是最小元素
public void pop() {
if(A.pop().equals(B.peek())){
B.pop();
}
}
//求栈顶元素
public int top() {
return A.peek();
}
public int min() {
return B.peek();
}
}