解题思路:
1.首先需要知道stack中peek()与pop()的区别
相同点:peek与pop都弹出栈顶的值;
不同点:peek在弹出数据的时候不改变栈的值(不删除栈顶的值),pop在弹出数据的时候会把栈顶的值删除。
2.设计A与B两个栈
class MinStack {
Stack<Integer> A, B;
public MinStack() {
A = new Stack<>();
B = new Stack<>();
}
public void push(int x) {
A.add(x);
if(B.empty() || B.peek() >= x)//栈B为空或元素比B的栈顶元素小才会加入栈B
B.add(x);
}
public void pop() {
//A的栈顶元素一定出栈
//B的栈顶元素只有在与 A栈顶元素相同时才会出栈,以此保证 B的栈顶元素始终为 A栈的最小栈
if(A.pop().equals(B.peek()))
B.pop();
}
public int top() {
return A.peek();
}
public int getMin() {
return B.peek();
}
}