155. Implementación de Python de pila mínima

155. Implementación de Python de pila mínima

"Mantente hambriento, mantente joven"

Me fui a casa recientemente y jugué durante dos días. A partir de hoy, insistí en cepillar algunas preguntas algorítmicas para seguir pensando y grabando todo el proceso.

Consulte la pregunta de LeetCode 155 para obtener detalles sobre la introducción del tema. Esta es una pregunta simple. El
requisito del tema es implementar una pila que pueda implementar operaciones pop y push y regresar al elemento superior de la pila. Estas operaciones son muy simples para la estructura de datos básica de Python, por lo que sin entrar en detalles, el punto es que el tema requiere una operación getMin para encontrar el valor mínimo de los elementos en la pila en tiempo constante y regresar.
Aquí, clasifico brevemente las ideas: En
primer lugar, la pila se caracteriza por ser el último en entrar, primero en salir. En esencia, también es una estructura lineal. La búsqueda aleatoria de la estructura lineal no se puede completar en un tiempo constante, por lo que se necesita la idea de " intercambiar espacio por tiempo " . Aquí hay una idea, que también está más en LeetCode:

Definir una pila auxiliar

Definir una pila auxiliar para sincronizar con la pila actual para almacenar el elemento más pequeño actual. Cuando un elemento se inserta en la pila, se juzga si este elemento es más pequeño que el elemento más pequeño en la parte superior de la pila auxiliar actual. Si es más pequeño, se colocará en la pila auxiliar, de lo contrario, copie el elemento superior de la pila en la pila auxiliar nuevamente.
Análisis de complejidad:

Complejidad temporal O (1 ): La complejidad temporal de empujar la pila, hacer estallar la pila y obtener el valor mínimo son todos O (1).
Complejidad espacial O (N) : La pila auxiliar que contiene NN elementos ocupa un espacio extra de lineal Talla.
El código es el siguiente: se
puede decir que es bastante simple

class MinStack:
    def __init__(self):
        self.stack=[]
        self.minstack=[]

    def push(self, x: int) -> None:
        self.stack.append(x)
        if self.minstack==[]:
            self.minstack.append(x)
        else:
            self.minstack.append(min(x,self.minstack[-1]))
    def pop(self) -> None:
        self.stack.pop()
        self.minstack.pop()

    def top(self) -> int:
        return self.stack[-1]

    def getMin(self) -> int:
        return self.minstack[-1]

Supongo que te gusta

Origin blog.csdn.net/weixin_45717055/article/details/112968121
Recomendado
Clasificación