• 单调栈


    41. 包含min函数的栈

    设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。

    • push(x)–将元素x插入栈中
    • pop()–移除栈顶元素
    • top()–得到栈顶元素
    • getMin()–得到栈中最小元素

    单调栈) O(1)

    https://www.acwing.com/solution/AcWing/content/749/
    我们除了维护基本的栈结构之外,还需要维护一个单调栈,来实现返回最小值的操作。
    下面介绍如何维护单调栈:

    当我们向栈中压入一个数时,如果该数 ≤单调栈的栈顶元素,则将该数同时压入单调栈中;否则,不压入,这是由于栈具有先进后出性质,所以在该数被弹出之前,栈中一直存在一个数比该数小,所以该数一定不会被当做最小数输出。
    当我们从栈中弹出一个数时,如果该数等于单调栈的栈顶元素,则同时将单调栈的栈顶元素弹出。
    单调栈由于其具有单调性,所以它的栈顶元素,就是当前栈中的最小数。

    class MinStack {
    public:
        /** initialize your data structure here. */
        stack<int> s;
        stack<int> smin;
        MinStack() {
            
        }
        
        void push(int x) {
            s.push(x);
            if(smin.empty() || smin.top() >= x)
                smin.push(x);
        }
        
        void pop() {
            if(s.top() == smin.top()) smin.pop();
            s.pop();
        }
        
        int top() {
            return s.top();
        }
        
        int getMin() {
            return smin.top();
        }
    };
  • 相关阅读:
    applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.
    HTML
    c# Path路径类
    C# 继承
    C# 结构体
    c# 类
    c#方法
    wpf开源控件MahApps.Metro
    c#数组类型
    c#类型转换
  • 原文地址:https://www.cnblogs.com/Aliencxl/p/12336267.html
Copyright © 2020-2023  润新知