Stack with Minimum
Stack with Minimum
Задача
Нужно реализовать стек, который поддерживает три операции:
push(x)— добавить элемент в конецpop()— удалить элемент из концаget_min()— получить минимальный элемент
Все операции должны работать за O(1).
Идея
Обычный стек не умеет быстро находить минимум — для этого пришлось бы каждый раз проходить по всем элементам.
Решение:
Будем хранить два стека:
st— обычный стекmn— стек минимумов
В стек mn будем класть текущий минимум на каждом шаге.
Как это работает
При push(x):
- добавляем
xв основной стек - в стек минимумов добавляем:
x, если стек пустmin(x, текущий минимум), иначе
При pop():
- удаляем элемент из обоих стеков
При get_min():
- возвращаем верхушку стека минимумов