Queue with Minimum
Queue with Minimum
Задача
Реализовать очередь, которая поддерживает три операции:
push(x)— добавить элемент в конецpop()— удалить элемент из началаget_min()— получить минимальный элемент
Все операции должны работать за O(1) амортизированно.
Идея
Очередь можно реализовать с помощью двух стеков:
in— стек для добавления элементовout— стек для удаления элементов
Если оба стека умеют поддерживать минимум (MinStack),
то минимум всей очереди равен:
Как это работает
Добавление (push)
Добавляем элемент в стек in.
Удаление (pop)
Если стек out пуст:
- переносим все элементы из
inвout - при переносе порядок автоматически переворачивается
После этого удаляем элемент из out.
Получение минимума (get_min)
- если один стек пуст — берём минимум из другого
- если оба не пусты — берём минимум из двух