• 【LeetCode & 剑指offer刷题】栈与队列题3:30 包含min函数的栈(155. Min Stack)


    【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)

    155. Min Stack

    Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
    • push(x) -- Push element x onto stack.
    • pop() -- Removes the element on top of the stack.
    • top() -- Get the top element.
    • getMin() -- Retrieve the minimum element in the stack.
    Example:
    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.getMin(); --> Returns -3.
    minStack.pop();
    minStack.top(); --> Returns 0.
    minStack.getMin(); --> Returns -2.

     
    //实现一个最小栈(要求获取最小值用常数时间)
    //方法一:用两个栈,一个栈存数据,一个栈存各阶段最小数
    class MinStack
    {
    private:
        stack<int> s1; //存数据
        stack<int> s2; //存各阶段最小数
    public:
        /** initialize your data structure here. */
        MinStack()
        {
           
        }
       
        void push(int x)
        {
            s1.push(x);
            if(s2.empty() || x <= s2.top()) s2.push(x); //如果s2为空,或者存入数小于等于之前最小数,则传入s2
        }
       
        void pop()
        {
            if(s1.top() == s2.top()) s2.pop(); //如果pop的是当前极小值,则s2也跟着pop
            s1.pop();
        }
       
        int top()
        {
            return s1.top();
        }
       
        int getMin()
        {
            return s2.top(); //栈顶元素为当前最小数
        }
    };
    /**
     * Your MinStack object will be instantiated and called as such:
     * MinStack obj = new MinStack();
     * obj.push(x);
     * obj.pop();
     * int param_3 = obj.top();
     * int param_4 = obj.getMin();
     */
     
     
    比较min栈与max队列
    (1)        if(s2.empty() || x <= s2.top()) s2.push(x); //如果s2为空,或者存入数小于等于之前最小数,则传入s2
    (2)
                while(!index.empty() && num[i] >= num[index.back()])
                    index.pop_back(); //从队尾依次弹出队列中比当前num值小的元素,同时也能保证队列首元素为当前窗口最大值下标
                index.push_back(i); //插入当前索引值,因为可能为其他窗口下的最大值
     
     
     
  • 相关阅读:
    pytest入门 及allure2报告生成
    java 常用集合list与Set、Map区别及适用场景总结
    通俗地解释脏读、不可重复读、幻读
    Serializable接口的意义和用法
    maven基础
    Class.forName()用法详解
    关于getClass(),Object.class,getClassLoader的理解
    maven(一) maven到底是个啥玩意~
    TCP/IP协议族体系结构:死也不能忘记的四个层
    HTML表单常用标签
  • 原文地址:https://www.cnblogs.com/wikiwen/p/10225132.html
Copyright © 2020-2023  润新知