- 自己写的时候ac不了,如下:
class MinStack {
Deque<Integer> xStack;
Deque<Integer> minStack;
public MinStack() {
xStack = new ArrayDeque<>();
minStack = new ArrayDeque<>();
minStack.push(Integer.MAX_VALUE);
}
public void push(int x) {
if (x <= minStack.peek()) {
xStack.push(x);
minStack.push(x);
} else {
xStack.push(x);
}
}
public void pop() {
if (xStack.peek() == minStack.peek()) {
xStack.pop();
minStack.pop();
} else {
xStack.pop();
}
}
public int top() {
return xStack.peek();
}
public int getMin() {
return minStack.peek();
}
}
然后在IDEA上断点执行的时候发现了问题,当辅助栈和主栈栈顶元素相等时,只出栈了主栈,辅助栈没有做操作。原因是栈peek方法返回的是Integer对象,我用==判断Integer是否相等,然后就错了。
2. 答案的写法略有不同,答案是在push的时候,如果待push的值小于辅助栈的栈顶,则两个栈都push,这点和我们一样,但是否则的话他是将主栈push k(待push的值) , 将辅助栈重复push辅助栈栈顶的值。这样在进行pop操作的时候无需判断,只需要将两个栈都pop即可。top方法和getMin方法是一样的,分别返回主栈和辅助栈栈顶的值。