private Deque<Integer> stack1;
private Deque<Integer> stack2;
public MinStack() {
stack1 = new ArrayDeque<>();
stack2 = new ArrayDeque<>();
}
//入栈,入到1栈,如果当前数值小于等于2栈的栈顶元素也入到2栈
public void push(int x) {
stack1.push(x);
if(stack2.isEmpty() || x <= stack2.peek()){
stack2.push(x);
}
}
//出栈,如果1栈栈顶元素等于2栈栈顶元素说明该数字也存入2栈了,2栈也要出栈。1栈出栈
public void pop() {
if(stack1.peek() == stack2.peek()){
stack2.pop();
}
stack1.pop();
}
//栈顶就是1栈栈顶
public int top() {
return stack1.peek();
}
//最小值就是2栈栈顶
public int min() {
return stack2.peek();
}
通过测试用例:14 / 19
输入:
["MinStack","此处四个push方法","pop","min","pop","min","pop","min"]
[[],[512],[-1024],[-1024],[512],此处六个[]]
输出:
[此处六个null,-1024,null,-1024,null,-1024]
预期结果:
[此处六个null,-1024,null,-1024,null,512]
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.