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".

lock icon+15 скрытых тестов при отправке

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"]