Loading

Loading

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]

posted @ 2024-11-23 22:49  QIOHA  阅读(4)  评论(0编辑  收藏  举报