3.7 cola máxima

título

Definir y aplicar una cola máxima función cola MAX_VALUE obtiene, requiriendo función MAX_VALUE, y el tiempo pop_front complejidad push_back son O (1).

Si la cola está vacía, MAX_VALUE pop_front y necesidad -1

Ejemplo 1

输入: 
["MaxQueue","push_back","push_back","max_value","pop_front","max_value"]
[[],[1],[2],[],[],[]]
输出: [null,null,null,2,1,2]

Ejemplo 2

输入: 
["MaxQueue","pop_front","max_value"]
[[],[],[]]
输出: [null,-1,-1]

pensamiento

  • Por la mañana, la primera pregunta un poco confuso, complicado pensar, de hecho, con el " máximo de la ventana deslizante enfoque" Hay algunos como, pero más simple de lo que es con una cola de dos vías para registrar el máximo.
  • Con dos colas, q como la cola principal. dq como una cola auxiliar.
  • dq característica más grande es el primer elemento de los elementos en orden descendente, por detrás.
  • Cuando un nuevo elemento de la cola para introducir el valor de q, que determinan el valor debe ser colocado en la posición dq, dq empezar a comparar desde el final del encuentro es menor que su elementos en la cola hasta que la cola está vacía o encontrar una valor mayor que el número, entonces el valor de la cola de la cola.
  • Cuando el primer elemento de la cola, prestar atención al valor máximo puede cambiar, por lo que desea actualizar dq, dq primer método consiste en determinar si el elemento es igual al valor igual al primer elemento, a continuación, dq también fuera de la cola, por lo demás sin cambios.

código

class MaxQueue {
private:
    queue<int> qMain;
    deque<int> dq;

public:
    MaxQueue() {

    }
    
    int max_value() {
        int res = -1;

        if ( !qMain.empty() )
            res = dq.front();
        
        return res;
    }
    
    void push_back(int value) {
        qMain.push( value );

        while ( !dq.empty() && value > dq.back() )
            dq.pop_back();
        
        dq.push_back( value );

        return;
    }
    
    int pop_front() {
        int res = -1;

        if (!qMain.empty() ) {
            if ( qMain.front() == dq.front() )
                dq.pop_front();
            
            res = qMain.front();
            qMain.pop();
        }
        
        return res;
    }
};

/**
 * Your MaxQueue object will be instantiated and called as such:
 * MaxQueue* obj = new MaxQueue();
 * int param_1 = obj->max_value();
 * obj->push_back(value);
 * int param_3 = obj->pop_front();
 */
Ha publicado 183 artículos originales · ganado elogios 43 · vistas 60000 +

Supongo que te gusta

Origin blog.csdn.net/m0_37822685/article/details/104710261
Recomendado
Clasificación