Sobes.tech
Senior

¿Por qué no se puede simplemente usar una variable max en lugar de la segunda pila?

sobes.tech AI

Respuesta de la IA

Использование одной переменной max вместо второго стека в задаче, например, нахождения максимума в стеке, не подходит из-за необходимости отслеживать максимум для каждого состояния стека при операциях push/pop.

Если хранить только одну переменную max, то при удалении элемента из стека нельзя будет корректно восстановить предыдущий максимум, так как информация о предыдущих максимумах теряется.

Второй стек служит для хранения максимумов на каждом уровне стека. При добавлении элемента сравниваем его с текущим максимумом и кладём в стек максимум из двух. При удалении элемента одновременно удаляем верхний элемент из стека максимумов, что позволяет всегда быстро получать текущий максимум.

Пример:

Stack<Integer> stack = new Stack<>();
Stack<Integer> maxStack = new Stack<>();

void push(int x) {
    stack.push(x);
    if (maxStack.isEmpty() || x >= maxStack.peek()) {
        maxStack.push(x);
    } else {
        maxStack.push(maxStack.peek());
    }
}

void pop() {
    stack.pop();
    maxStack.pop();
}

int getMax() {
    return maxStack.peek();
}

Таким образом, второй стек обеспечивает корректное и эффективное отслеживание максимума без потери информации при изменении содержимого основного стека.