SprintCode.pro

Подготовка к алгоритмическим задачам

Super

Что делать, если не знаешь решения задачи на собеседовании

10 мин чтения
собеседование
подготовка
коммуникация

Коротко

Застрять на собеседовании — нормально. Ненормально — застрять молча и без плана. Ниже — последовательность действий, которая работает почти всегда.

ШагЧто делать
1Проговорить, что застряли
2Разобрать маленький пример руками
3Написать наивное решение
4Перебрать структуры данных вслух
5Найти избыточную работу
6Вспомнить похожие задачи

Первое: скажите об этом

Худшее, что можно сделать, — замолчать и смотреть в экран.

Правильная фраза: «Пока не вижу, как убрать вложенный цикл. Давайте я проговорю, что уже рассмотрел».

Это даёт три эффекта сразу: интервьюер понимает, где вы находитесь; появляется повод для подсказки; вы снимаете напряжение и возвращаетесь к рассуждениям.

Признаваться в затыке не стыдно. Интервьюеры застревают на своих же задачах, и это всем известно.

Шаг 1: разберите маленький пример руками

Если общий случай не поддаётся — возьмите вход из трёх-четырёх элементов и решите его на бумаге.

задача: найти два числа с суммой 9
массив: [2, 7, 11, 15]

руками: 2 + 7 = 9 → индексы 0 и 1
что я делал? для 2 искал 7, то есть 9 − 2

В последней строке уже видна идея: для каждого элемента мы ищем его дополнение. А поиск — это хеш-таблица.

Разбор маленького примера — самый надёжный способ нащупать закономерность. Он работает намного чаще, чем попытка «придумать алгоритм» в общем виде.

Шаг 2: напишите наивное решение

Полный перебор — это тоже решение. Оно даёт три вещи:

  • показывает, что вы поняли задачу;
  • даёт точку отсчёта для оптимизации;
  • гарантирует, что вы не уйдёте с пустым экраном.
# наивно: O(n²), но работает for i in range(len(nums)): for j in range(i + 1, len(nums)): if nums[i] + nums[j] == target: return [i, j]

Проговорите: «Вот решение за O(n²). Оно рабочее, теперь подумаем, как ускорить».

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

Шаг 3: переберите структуры данных вслух

Механический, но действенный приём. Пройдитесь по списку и спросите, что даст каждая структура:

СтруктураЧто даёт
Хеш-таблицапоиск за O(1), подсчёт частот
Множествопроверка наличия, уникальность
Стекобработка в обратном порядке, вложенность
Очередьобработка по порядку, обход в ширину
Кучабыстрый минимум или максимум
Отсортированный массивбинарный поиск, два указателя
Дерево / графиерархия, связи

Часто решение находится на этом шаге. Проговаривайте вслух: «Хеш-таблица дала бы быстрый поиск... а что мне нужно быстро искать? Дополнение до target. Кажется, это оно».

Шаг 4: найдите избыточную работу

Спросите себя: что я пересчитываю дважды?

Почти все оптимизации сводятся к устранению повторной работы:

  • пересчитываем сумму окна → скользящее окно;
  • пересчитываем одну и ту же подзадачу → мемоизация;
  • ищем элемент перебором → хеш-таблица;
  • сортируем внутри цикла → вынести наружу;
  • каждый раз ищем минимум → куча.

Эта табличка покрывает большинство задач с собеседований. Если наивное решение написано, найти в нём избыточность — задача механическая.

Шаг 5: вспомните похожие задачи

«Это похоже на задачу про максимальную сумму подмассива, там помогала динамика».

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

Полезно держать в голове признаки:

  • отсортированный массив, ищем пару → два указателя;
  • непрерывный подотрезок с условием → скользящее окно;
  • «найдите все варианты» → перебор с возвратом;
  • «минимальное/максимальное количество» → динамика или жадность;
  • вложенность, парность → стек;
  • «k наибольших» → куча;
  • сетка, связи → обход графа.

Шаг 6: примите подсказку

Если интервьюер что-то предлагает — это значит, что вы свернули не туда и он хочет вернуть вас на дорогу.

Остановитесь. Повторите подсказку вслух. Подумайте над ней 20–30 секунд и озвучьте, что она даёт.

Игнорировать подсказку хуже, чем не решить задачу. Это читается как неумение слушать коллег.

Если время кончается

Скажите прямо: «Времени мало, давайте я допишу наивное решение и проговорю, как бы его оптимизировал».

Рабочее решение за O(n²) плюс внятное описание оптимизации — это часто проходной результат. Пустой экран плюс «я почти придумал» — нет.

Чего делать не надо

Молчать. Повторю ещё раз, потому что это ошибка номер один.

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

Требовать другую задачу. Выглядит как отказ от борьбы.

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

Сдаваться через пять минут. Затык на 10–15 минут — обычное дело. Реальное поражение — прекратить думать.

Что помогает заранее

Отработанная схема. Когда последовательность шагов доведена до автоматизма, паника не наступает — вы просто идёте по пунктам.

Тренировка вслух. Если вы никогда не говорили во время решения, на собеседовании это станет второй задачей поверх первой.

Решение незнакомых задач. Регулярно берите задачи из тем, которые не проходили. Навык «что делать, когда не знаю» тренируется только так.

Что запомнить

  • Скажите вслух, что застряли, — это нормально и открывает путь к подсказке.
  • Разберите маленький пример руками: закономерность видна лучше, чем в общем случае.
  • Всегда пишите наивное решение — оно лучше пустого экрана и даёт базу для оптимизации.
  • Переберите структуры данных вслух и спросите себя, что пересчитывается дважды.
  • Подсказку интервьюера обязательно обдумайте вслух, а не отмахивайтесь.
Пройди собеседование в топ-компанию
Платформа для подготовки

Решай алгоритмические задачи как профи

✓ Популярные алгоритмы✓ Разбор решений✓ AI помощь
Начать сейчас
Программист за работой

Задачи по теме