• 155 最小栈


    155 最小栈

    题目:设计一个可以常数时间获取最小值的栈

    示例:

    输入:
    ["MinStack","push","push","push","getMin","pop","top","getMin"]
    [[],[-2],[0],[-3],[],[],[],[]]
    
    输出:
    [null,null,null,null,-3,null,0,-2]
    
    解释:
    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.getMin();   --> 返回 -3.
    minStack.pop();
    minStack.top();      --> 返回 0.
    minStack.getMin();   --> 返回 -2.
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    思考:

    public class MinStack {
        /**
         * 栈1:数据栈,正常压入弹出
         */
        private LinkedList<Integer> stack1;
    
        /**
         * 栈2:辅助栈,栈顶保持栈1中的最小值
         */
        private LinkedList<Integer> stack2;
    
        public MinStack() {
            stack1 = new LinkedList<>();
            stack2 = new LinkedList<>();
        }
    
        public void push(int x) {
            // 栈2压入:1.x大就压入min;2.x小就压入x
            if (stack2.isEmpty() || x <= getMin()) {
                stack2.push(x);
            }
            if (x > getMin()) {
                stack2.push(getMin());
            }
            // 栈1每次正常进栈
            stack1.push(x);
        }
    
        public void pop() {
            if (stack1.isEmpty()) {
                throw new RuntimeException("MinStack is empty");
            }
            // 出栈是两个辅助栈都要出
            stack1.pop();
            stack2.pop();
        }
    
        public int top() {
            if (stack1.isEmpty()) {
                throw new RuntimeException("MinStack is empty");
            }
            return stack1.peek();
        }
    
        public int getMin() {
            if (stack2.isEmpty()) {
                throw new RuntimeException("MinStack is empty");
            }
            return stack2.peek();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
  • 相关阅读:
    安恒信息明御安全网关 suffix参数任意文件上传漏洞
    【HTML】原生js实现的图书馆管理系统
    @Valid和 @Validated
    C++仿函数
    软件测试基础知识
    CAS锁机制
    Linux 进程概念 —— 冯 • 诺依曼体系结构
    MySQL常见问题
    通用导出el-table表格内容的方法
    FFmpeg的makefile逻辑分析
  • 原文地址:https://blog.csdn.net/qq_34473348/article/details/125418399