Leetcode 155. Pila mínima [Implementación de pila original]

Descripción del problema

Diseñe una pila que admita operaciones push, pop y top y pueda recuperar el elemento más pequeño en un tiempo constante.

  • push (x): empuja el elemento x sobre la pila.
  • pop (): elimina el elemento en la parte superior de la pila.
  • top (): obtiene el elemento superior de la pila.
  • getMin (): recupera el elemento más pequeño de la pila.

Informe de resolución de problemas.

La diferencia entre esta pila mínima y la pila general es que puede volver directamente al valor mínimo.

Podemos usar una variable para guardar el valor mínimo, pero si solo se hace esto, cuando aparece este valor mínimo, no se puede encontrar el segundo valor más pequeño.
Por lo tanto, cada vez que se actualiza el valor mínimo [debe ser x<=MINN, el signo igual debe tomarse aquí, si el signo igual no se toma aquí, la función actualizará el otro valor no mínimo al valor mínimo cuando se muestre el valor mínimo en otras posiciones] Primero empujamos el valor mínimo anterior a la pila, y luego empujamos el valor mínimo; y cuando el elemento emergente es el valor mínimo, también emergemos el siguiente elemento del elemento superior de la pila y asignamos el segundo elemento emergente al valor El valor mínimo actual.

Código de implementación

class MinStack {
public:
    /** initialize your data structure here. */
    stack<int>stack;
    int MINN=INT_MAX;
    MinStack() {
    }
    void push(int x) {
        if(x<=MINN){
            stack.push(MINN);
            MINN=x;
        }
        stack.push(x);
    }
    
    void pop() {
        if(stack.top()==MINN){
            stack.pop();
            MINN=stack.top();
        }
        stack.pop();
    }
    
    int top() {
        return stack.size()==0?-1:stack.top();
    }
    
    int getMin() {
       return MINN;
    }
};

/**
 * 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();
 */

Referencias

[1] Leetcode 155. Pila mínima
[2] Área del problema: windliang

Publicado 139 artículos originales · elogiado 8 · 10,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/qq_27690765/article/details/105354088
Recomendado
Clasificación