30题 栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.
使用栈,定义函数实现入栈出栈栈顶元素最小值
stack.peek();
参数:该方法不带任何参数。
返回值:该方法返回堆栈顶部的元素,如果堆栈为空,则返回NULL。
30题解
class MinStack {
//双栈 一个存储全部数据,一个存储当前最小数据
/** initialize your data structure here. */
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","push","push","push","pop","min","pop","min","pop","min"]
[[],[512],[-1024],[-1024],[512],[],[],[],[],[],[]]
输出:
[null,null,null,null,null,null,-1024,null,-1024,null,-1024]
预期结果:
[null,null,null,null,null,null,-1024,null,-1024,null,512]
哪里错了啊?