Menu
CoddyTech

Implement Stack using Queues

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

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

Функция

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

Ограничения

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

Примеры

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

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

Можно ли оставить одну очередь, но перенести работу с операции добавления в операцию извлечения, чтобы добавление выполнялось за O(1)?

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

Тест #1

Тест #2

Тест #3

Аргументы

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

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

["null", "null", "2", "2", "false"]