Solución de pila mínima (155)

tema

inserte la descripción de la imagen aquí

analizar

Todas las operaciones push, pop, y en esta pregunta pueden ser compatibles con clases como y , y su complejidad temporal es . La dificultad radica en el método: para obtener el elemento más pequeño en la pila, si la complejidad temporal de atravesar toda el área de la pila para encontrar el valor mínimo es , se necesita una pila auxiliar para optimizar la complejidad temporal .topStackDequeO(1)getMainO(n)O(1)

operación de empuje :

inserte la descripción de la imagen aquí
El funcionamiento de la pila auxiliar es el mismo que el de la pila original, pero el valor de los datos de la pila auxiliar necesita pushser el el valor actual de la pila auxiliar 最小值, de modo que al obtener el valor mínimo en la pila , peeklos datos en la parte superior de la pila se pueden obtener directamente de la pila auxiliar.

Los pasos de la pila auxiliar son los mismos que los de la pila original pushy ambos están popsincronizados para lograr el mismo funcionamiento de las dos pilas. La operación es simple, no es necesario juzgar y simplemente proceder con las dos pilas , y no es necesario hacer un dibujo, consulte el código a continuación.入栈出栈poppop

el código

辅助栈初始化时需要写入一个最大值,否则第一次比对栈顶没有内容会报错。
class MinStack {
    
    

    ArrayDeque<Integer> stack;
    ArrayDeque<Integer> minStack;

    public MinStack() {
    
    
        stack = new ArrayDeque<>();
        minStack = new ArrayDeque<>();
        minStack.push(Integer.MAX_VALUE);
    }

    public void push(int val) {
    
    
        stack.push(val);
        minStack.push(Math.min(minStack.peek(), val));
    }

    public void pop() {
    
    
        stack.pop();
        minStack.pop();
    }

    public int top() {
    
    
        return stack.peek();
    }

    public int getMin() {
    
    
        return minStack.peek();
    }
}

Supongo que te gusta

Origin blog.csdn.net/AnNanDu/article/details/126847127
Recomendado
Clasificación