Этапы собеседования

Алгоритмы на собеседовании: какие темы спрашивают и как готовиться

Обновлено 7 мин чтения 40-60 минут на 1-2 задачи Один-два инженера, иногда отдельная секция, иногда часть лайвкодинга
Содержание
  1. Коротко
  2. Что проверяют
  3. Как проходит
  4. Паттерны: как узнать по условию
  5. Сложность: O-нотация без страха
  6. Частые вопросы с разбором
  7. План подготовки по паттернам
  8. Сколько задач решать
  9. Вопросы из базы
  10. Частые ошибки
  11. Чек-лист подготовки
  12. Как тренировать
  13. Частые вопросы
Коротко

Алгоритмическая секция это одна-две задачи на 40-60 минут, где нужно найти эффективное решение, написать код и оценить сложность. Большинство задач сводится к десятку паттернов: хеш-таблица, два указателя, скользящее окно, стек, бинарный поиск, обход дерева и графа, куча, динамическое программирование. Готовиться выгоднее по паттернам, а не по случайным задачам. Учитесь узнавать паттерн по признакам в условии.

Что проверяют

  • Узнаёте ли вы паттерн задачи по условию
  • Можете ли перейти от наивного решения к эффективному
  • Правильно ли оцениваете сложность по времени и памяти
  • Пишете ли код без ошибок на границах: пустой вход, один элемент, переполнение
  • Проговариваете ли ход мысли и проверяете ли решение сами

Как проходит

  1. 1

    Условие и уточнения

    Размеры входа, диапазон значений, отсортирован ли массив, есть ли повторы. Размер входа подсказывает нужную сложность.

  2. 2

    Примеры руками

    Разберите обычный и краевой пример. Часто идея решения видна уже на этом шаге.

  3. 3

    Наивное решение

    Назовите его и его сложность. Это страховка и точка отсчёта.

  4. 4

    Оптимизация

    Подумайте, что лишнее считается повторно и какая структура данных это уберёт. Озвучьте итоговую сложность.

  5. 5

    Код и проверка

    Пишите, прогоните пример по коду, проверьте краевые случаи. Подробнее про процесс в разделе о лайвкодинге.

Паттерны: как узнать по условию

Ниже основные паттерны в порядке, в котором их удобно учить. Признак в условии помогает выбрать подход за первые минуты, а не перебирать всё подряд.

ПаттернПризнак в условииПример задачи
Хеш-таблицаНайти пару, дубль, частоту, сгруппироватьTwo Sum
Два указателяОтсортированный массив, пара с суммой, палиндром, работа на местеПалиндром двумя указателями
Скользящее окноНепрерывный подмассив или подстрока с условиемПодстрока без повторов
Префиксные суммыСуммы на отрезках, число подмассивов с суммой kПодотрезки с суммой K
СтекСкобки, ближайший больший элемент, вложенностьСкобочная последовательность
Бинарный поискОтсортированные данные или поиск минимального подходящего ответаБинарный поиск
Связные спискиРазворот, цикл, середина, слияние списковРазворот списка
ДеревьяИерархия, глубина, обход, BSTГлубина оргструктуры
Графы: BFS и DFSСвязи, кратчайший путь без весов, острова на картеОстрова на карте
КучаTop-K, медиана потока, слияние k списковk самых крупных платежей
ИнтервалыОтрезки времени, пересечения, переговоркиОбъединить отрезки
Динамическое программированиеЧисло способов, минимум или максимум, перекрывающиеся подзадачиПодъём по лестнице
Перебор с возвратомВсе варианты: перестановки, подмножества, расстановкиВсе скобочные последовательности

Реже встречаются жадные алгоритмы, биты и матрицы. Их стоит знать на базовом уровне после основных паттернов.

Сложность: O-нотация без страха

O-нотация описывает, как растёт время или память с ростом входа. На собеседовании спрашивают почти всегда, поэтому сложность нужно уметь оценить за минуту.

СложностьГде встречаетсяПодходит для n до
O(1)Доступ по индексу, операции с хеш-таблицей в среднемЛюбого
O(log n)Бинарный поиск, операции с кучей и сбалансированным деревомЛюбого
O(n)Один проход, хеш-таблица, два указателя, окноПорядка 10⁷-10⁸
O(n log n)Сортировка, n операций с кучейПорядка 10⁶
O(n²)Два вложенных циклаПорядка 10³-10⁴
O(2ⁿ), O(n!)Перебор подмножеств и перестановокПорядка 20 и 10
Ограничения из правой колонки это грубый ориентир. Если интервьюер говорит, что n до миллиона, решение за O(n²) почти наверняка не подойдёт.

Не забывайте про память: рекурсия занимает стек глубиной до n, хеш-таблица хранит до n элементов. Скажите и это, когда называете итоговую сложность.

Частые вопросы с разбором

Как оценить сложность решения?

Как отвечать
Посчитайте вложенность циклов и сколько раз выполняется тело, учтите стоимость операций внутри: поиск в массиве O(n), в хеш-таблице O(1) в среднем. Отдельно назовите память.
Тезисы ответа и тренировка вслух

Объясните метод двух указателей

Как отвечать
Два индекса двигаются по массиву навстречу друг другу или в одну сторону с разной скоростью. Работает, когда по сравнению можно понять, какой указатель сдвинуть. Время O(n), память O(1).
Тезисы ответа и тренировка вслух

Объясните скользящее окно

Как отвечать
Держите границы окна и состояние внутри него. Правую границу расширяете, левую сдвигаете, пока окно нарушает условие. Каждый элемент входит и выходит один раз, поэтому O(n).
Тезисы ответа и тренировка вслух

Объясните BFS и его сложность

Как отвечать
Обход в ширину через очередь, с отметкой посещённых вершин. Находит кратчайший путь в графе без весов. Время O(V + E), память O(V).
Тезисы ответа и тренировка вслух

Как найти top-K элементов?

Как отвечать
Куча размера k: проходите по данным и держите k лучших, выталкивая худший. Время O(n log k), память O(k). Сортировка всего массива дала бы O(n log n).
Тезисы ответа и тренировка вслух

Объясните задачу о размене монет

Как отвечать
Динамика: dp[x] это минимум монет для суммы x, переход dp[x] = min(dp[x - c] + 1) по всем монетам c. Время O(сумма × число монет). Скажите, почему жадный выбор крупной монеты тут ошибается.
Тезисы ответа и тренировка вслух

План подготовки по паттернам

Учите паттерны по одному: короткая теория, 3-5 задач на паттерн, затем смешанные задачи, где паттерн нужно угадать самому. Порядок ниже идёт от простого к сложному и опирается на предыдущие темы.

  1. Сложность и базовые структуры: массив, строка, хеш-таблица.
  2. Два указателя, скользящее окно, префиксные суммы.
  3. Стек и бинарный поиск, включая поиск по ответу.
  4. Связные списки и деревья: рекурсия и обходы.
  5. Графы: BFS, DFS, компоненты связности, топологическая сортировка.
  6. Куча и интервалы.
  7. Динамическое программирование и перебор с возвратом.
  8. Смешанные задачи на время, без подсказки о паттерне.

Если до собеседования мало времени, сосредоточьтесь на первых трёх пунктах и деревьях: эти темы встречаются чаще всего. Динамика и сложные графы чаще нужны там, где алгоритмическая секция строгая.

Сколько задач решать

Единой нормы нет, и любая цифра будет условной. Честный ориентир такой: важнее, чтобы вы уверенно решали новые задачи по каждому паттерну, чем общее число решённых.

ЦельОриентир
Освоить паттерн3-5 задач разной сложности, решённых без подсказки
ЗакрепитьЧерез несколько дней решить одну задачу паттерна заново, с нуля
Проверить готовностьСерия незнакомых задач на время, где паттерн нужно узнать самому

Если вы стабильно решаете незнакомую задачу средней сложности за 30-40 минут с объяснением вслух, вы готовы к большинству алгоритмических секций. Перед этапом посмотрите, как секция устроена в конкретной компании, в разделе компаний.

Вопросы из базы Техпрогона

Частые вопросы этого этапа с ответом и разбором. Откройте любой и попробуйте ответить сами.

Частые ошибки

  • Решать сотни случайных задач без разбора, какой в них паттерн
  • Сразу писать код, не разобрав пример руками
  • Не назвать наивное решение и уйти в тишину в поисках идеального
  • Ошибаться в сложности: забыть про сортировку или поиск внутри цикла
  • Не проверить пустой массив, один элемент и повторы
  • Учить решения наизусть: на смене условия такой подход ломается

Чек-лист подготовки

  • Могу оценить сложность любого своего решения за минуту
  • По каждому основному паттерну решил 3-5 задач без подсказки
  • Умею узнавать паттерн по признакам в условии
  • Решил несколько смешанных задач на время без подсказки о теме
  • Проговариваю вслух шаги: уточнения, примеры, подход, код, проверка
  • Знаю стандартные структуры своего языка: словарь, множество, очередь, куча
  • Прошёл хотя бы один мок с живым интервьюером

Как тренировать этот этап в Техпрогоне

  • Уроки трека Алгоритмы по каждому паттерну: короткая теория и разбор задач
  • Задачи с автопроверкой на открытых и скрытых тестах: JS, TS и Python в браузере, другие языки через раннер на сервере
  • Устные вопросы «объясни паттерн» с чек-листом тезисов: тренирует объяснение сложности вслух
  • Лестница стресса: «Наедине» с подсказками, «Вслух» с обязательными уточнениями и подходом до кода, «Под давлением» с таймером
  • Живой мок по ссылке: друг видит условие, эталон и рубрику процесса и ставит оценки
  • Контест в Рывке: 4 задачи трека Алгоритмы на 2 часа общего таймера, итог по решённым задачам и штрафному времени
  • Билеты по алгоритмам: вопросы на сложность и выбор подхода, сдан при двух ошибках и меньше

Частые вопросы

Нужны ли алгоритмы фронтенду и мобильным разработчикам?
Часто да, хотя обычно на более простом уровне: хеш-таблица, два указателя, обходы деревьев. Строгая алгоритмическая секция встречается не везде, поэтому смотрите описание этапов конкретной компании.
На каком языке лучше решать алгоритмические задачи?
На том, который вы знаете лучше всего и который разрешён на собеседовании. Важно свободно владеть стандартными структурами: словарём, множеством, очередью, кучей.
Что делать, если не узнал паттерн?
Начните с наивного решения и его сложности, затем ищите повторную работу, которую можно запомнить в структуре данных. Проговаривайте это вслух: интервьюер часто подскажет направление.
Нужно ли знать сортировки наизусть?
Знать, как работают быстрая сортировка и сортировка слиянием и какая у них сложность, полезно. Писать их с нуля просят редко, гораздо чаще используют встроенную сортировку как шаг решения.
Сколько времени нужно на подготовку к алгоритмам с нуля?
Зависит от базы и времени в день. При регулярных занятиях основные паттерны обычно осваивают за несколько недель, динамика и графы требуют больше времени. Лучше заниматься понемногу каждый день.
Динамическое программирование спрашивают у junior?
Иногда, чаще простые задачи вроде подъёма по лестнице или размена монет. Для junior важнее уверенно владеть хеш-таблицей, указателями и обходами.

Отрепетируйте алгоритмы до собеса

Уроки, билеты, устные вопросы с тезисами и мок вслух с таймером. Бесплатный тариф без ограничения по времени.

Другие этапы и разделы