1123-最小栈
最小栈 leetcode 155.
题目大意:设计一个栈,要求在常数时间内检测到最小元素
解题思路:设置一个存最小元素的栈,这样就可以同步更新最小值
题解及注释:
class MinStack {
private Stack<Integer> stack;
private Stack<Integer> minStack; // 最小栈
// 初始化
public MinStack() {
stack = new Stack();
minStack = new Stack();
}
// 当最小栈为空或者小于等于该最小栈栈顶元素时输入,为空的情况是考虑第一个push的不管怎么样都是最小的(当下只有一个),小于等于是因为有重复的最小值也需要输入,不然最小栈只有一个
public void push(int val) {
if (minStack.isEmpty() || val <= minStack.peek()) {
minStack.push(val);
}
stack.push(val);
}
// 出栈就是当两个栈栈顶元素相等,但是这里有问题
public void pop() {
// 我不理解为什么==会在这里影响,当重复最小值都pop完了,再去getmin还是会有之前的最小值
// if (minStack.peek() == stack.pop()){
if (minStack.peek().equals(stack.pop())){
minStack.pop();
}
}
public int top() {
return stack.peek();
}
public int getMin() {
return minStack.peek();
}
}
总结:有一个问题不解,留下测试用例和结果方便会看解答吧
测试用例:
输入
["MinStack","push","push","push","push","pop","getMin","pop","getMin","pop","getMin"]
[[],[512],[-1024],[-1024],[512],[],[],[],[],[],[]]
输出
[null,null,null,null,null,null,-1024,null,-1024,null,-1024]
预期结果 最后的-1024和预期的512不一样
[null,null,null,null,null,null,-1024,null,-1024,null,512]