Menu
CoddyTech

Implement Queue Using Stacks

Создай очередь FIFO (первым пришёл — первым ушёл), используя для хранения только два стека. Стек может только добавлять элемент наверх, удалять верхний элемент, считывать верхний элемент и сообщать, пуст ли он. Очередь поддерживает операции push x (добавить x в конец), pop (удалить и вернуть первый элемент), peek (вернуть первый элемент) и empty (пустая ли очередь?).

Тебе даны операции в порядке выполнения в виде ops, при этом args[i] содержит значение для операции push и 0 для всех остальных операций. Выполни их для одной очереди, изначально пустой, и верни по одной строке для каждой операции: "null" для push, число в виде текста для pop или peek и "true" или "false" для empty.

Функция

queueOps(ops: string-array, args: integer-array) → string-array
opsstring-array
операции в порядке их выполнения
argsinteger-array
значение для каждого push, 0 для всех остальных операций
Возвращаетstring-array
один ответ на операцию в виде текста

Ограничения

  • 1 ≤ ops.length ≤ 2000
  • args.length == ops.length
  • Каждый ops[i] — это push, pop, peek или empty.
  • -109 ≤ args[i] ≤ 109 для операции добавления в стек и args[i] == 0 для любой другой операции.
  • pop и peek вызываются только тогда, когда в очереди есть хотя бы один элемент.

Примеры

Ввод
ops = ["push", "push", "peek", "pop", "empty"]args = [1, 2, 0, 0, 0]
Вывод
["null", "null", "1", "1", "false"]
Пояснение
После добавления сначала 1, а затем 2, в начале находится 1, поэтому и peek, и pop возвращают "1". 2 всё ещё находится внутри, поэтому empty возвращает "false".
challenge icon

Дополнительный вопрос

Как добавить операцию back, которая возвращает самый новый элемент за O(1), не нарушая амортизированную оценку остальных операций?

Сбросить код
def queueOps(ops, args):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргументы

ops = ["push", "push", "peek", "pop", "empty"]
args = [1, 2, 0, 0, 0]

Ожидаемый вывод

["null", "null", "1", "1", "false"]