awesome-everything EN
↑ Обратно к восхождению

Алгоритмы с нуля

Списки, стеки, очереди: тест с выбором

Суть Синтез по юниту в формате выбора: cost model linked list, манипуляция pointer, дисциплина LIFO/FIFO, реализация deque и амортизационный аргумент monotonic stack.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 13 min

Шесть вопросов через весь юнит. Каждый — это решение, на которое давит интервьюер: не определение для пересказа, а cost model, которую надо защитить, и выбор реализации, который надо обосновать.

Цель

Убедись, что умеешь связать раскладку linked list в памяти с его cost model, рассуждать о манипуляции pointer не теряя узлов, выбирать правильную дисциплину LIFO/FIFO под задачу и объяснять, почему monotonic stack линеен несмотря на внутренний цикл.

Викторина

Нагрузка делает push в голову 10 000 раз, а затем 100 раз читает по индексу в случайных позициях. Надо выбрать array vs singly linked list. Что быстрее в сумме и почему?

Викторина

Ты пишешь in-place разворот singly linked list. Коллега пишет внутри цикла current.next = prev; current = current.next;. Что ломается?

Викторина

Ты постоянно вставляешь и удаляешь в голове singly linked list и всё время натыкаешься на null-pointer спецслучаи для пустого списка и позиции головы. Какой самый чистый структурный фикс?

Викторина

Ты валидируешь вложенные скобки в парсере конфигов и отдельно делаешь обход дерева в порядке уровней (в ширину). Какие структуры подходят и почему?

Викторина

Ты реализуешь FIFO queue на массиве JavaScript: push для enqueue и shift для dequeue. Под устойчивым потоком из N пар enqueue+dequeue какова суммарная стоимость и фикс?

Викторина

Решение next-greater-element на monotonic stack имеет цикл while внутри for, но это O(n), а не O(n^2). В чём точный аргумент?

Итог

Сквозная линия юнита — одна cost model и три дисциплины. Раскладка в памяти задаёт стоимость: непрерывность покупает O(1)-индексацию, разбросанность — O(1)-вставку в голову; выбираешь по доминирующей операции. Манипуляция pointer — это сохранять связи до перезаписи и использовать sentinel, чтобы стереть спецслучаи головы. Stack (LIFO) и queue (FIFO) — это дисциплины, а не структуры данных: выбирай по тому, нужен ли тебе последний-первым или порядок прибытия, и никогда не делай dequeue через shift. Monotonic stack — это выигрыш: stack плюс инвариант порядка превращают O(n^2)-скан в O(n) по аргументу push-once/pop-once.

Продолжить восхождение ↑Списки, стеки, очереди: свободное припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources4
expand
  1. 01
  2. 02
  3. 03
  4. 04

Trademarks belong to their respective owners. Editorial reference only.