Sobes.tech
Назад к вопросам
Senior
6

Почему нельзя просто использовать одну переменную max вместо второго стека?

Компании, где спрашивали
солюшин

Ответ от нейросети

sobes.tech AI

Использование одной переменной 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();
}

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