Вступить в клуб →
сложнаявопросСтек, очередь и куча

Очередь на двух стеках: почему дорогой pop не делает алгоритм квадратичным

class Queue:
    def __init__(self):
        self.inbox = []
        self.outbox = []

    def push(self, x):
        self.inbox.append(x)

    def pop(self):
        if not self.outbox:
            while self.inbox:
                self.outbox.append(self.inbox.pop())
        return self.outbox.pop()

Выполняется произвольная последовательность из n операций push и pop (каждый pop вызывается, когда очередь непуста). Что верно про суммарное время?

  • Один pop в худшем случае стоит O(n), значит n операций дают O(n^2) — это и есть точная оценка
  • Суммарно O(n): каждый элемент перекладывается из inbox в outbox ровно один раз
  • Каждая операция O(1) в худшем случае: у списка pop() без индекса всегда константа, значит и у очереди
  • Переливать inbox в outbox нужно на каждом pop, иначе нарушится порядок FIFO — отсюда и O(n^2)

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела