zoukankan      html  css  js  c++  java
  • 最值队列

        实现一个最值队列,要求取最大值、最小值的时间复杂度为O(1)。以前实现最值栈比较多,又因为一个队列可以用两个栈实现,所以最传统的做法是用最值栈实现最值队列。这里用deque实现最值队列,简单高效。

    template<typename T>
    class queue_ext : public queue<T>
    {
    public:
        void push(const typename queue<T>::value_type &t)
        {
            // Update max deque.
            while (!m_dqMax.empty() && t > m_dqMax.back())
            {
                m_dqMax.pop_back();
            }
     
            m_dqMax.push_back(t);
     
            // Update min deque.
            while (!m_dqMin.empty() && t < m_dqMin.back())
            {
                m_dqMin.pop_back();
            }
     
            m_dqMin.push_back(t);
     
            queue<T>::push(t);
        }
     
        void pop()
        {
            if (!m_dqMax.empty() && queue<T>::front() == m_dqMax.front())
            {
                m_dqMax.pop_front();
            }
     
            if (!m_dqMin.empty() && queue<T>::front() == m_dqMin.front())
            {
                m_dqMin.pop_front();
            }
     
            queue<T>::pop();
        }
     
        typename queue<T>::const_reference max_val() const
        {
            return m_dqMax.front();
        }
     
        typename queue<T>::const_reference min_val() const
        {
            return m_dqMin.front();
        }
     
    private:
        deque<T> m_dqMin;
        deque<T> m_dqMax;
    };
  • 相关阅读:
    输入分隔符
    GO
    match|align|identify|cover_rate
    KEGG
    InterProScan
    Functional annotation
    GeneWise
    get middle lines
    goland debug web app with urfave cli
    go mod proxy
  • 原文地址:https://www.cnblogs.com/codingmylife/p/2680929.html
Copyright © 2011-2022 走看看