tema
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 .top
Stack
Deque
O(1)
getMain
O(n)
O(1)
operación de empuje :
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 push
ser el el valor actual de la pila auxiliar 最小值
, de modo que al obtener el valor mínimo en la pila , peek
los 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 push
y ambos están pop
sincronizados 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.入栈
出栈
pop
pop
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();
}
}