Клеман Михайлеску: «Тим получил бы Strong Hire за решение задачи уровня Very Hard»

Clément Mihailescu 1,6 млн 59 мин 3 мин 26.12.2019
Главное

Клеман Михайлеску провёл тестовое техническое интервью с 19-летним канадским студентом Тимом, известным по YouTube-каналу Tech with Tim. Тим готовился к собеседованиям в крупные ИТ-компании в течение трёх недель и решил около 50 задач на платформе AlgoExpert.

📅 Задача: поиск свободного времени в календарях 3:09

Интервьюер предложил написать алгоритм для поиска общих свободных слотов в графиках двух сотрудников . Входящие данные представлены в виде списков занятых интервалов, например, с 12:00 до 13:00 и с 15:00 до 16:30 . Дополнительно учитываются «дневные границы» — время начала и окончания рабочего дня, раньше или позже которых встречи проводить нельзя .

Условия задачи включают следующие параметры:

💡 Выработка стратегии решения 7:53

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

Клеман Михайлеску предложил упростить подход через объединение данных . По его мнению, эффективнее сначала слить оба календаря в один общий список занятого времени. После объединения нужно «схлопнуть» перекрывающиеся интервалы в единые блоки недоступности . Свободные окна между такими блоками и станут ответом на задачу.

Алгоритм Тима трансформировался в четыре этапа:

  1. Объединение двух отсортированных списков встреч в один по аналогии с сортировкой слиянием .
  2. Слияние перекрывающихся интервалов (например, если один занят с 10:00 до 11:30, а другой — с 11:00 до 12:00) .
  3. Вычисление промежутков между итоговыми блоками занятости.
  4. Фильтрация промежутков, которые короче требуемой длительности встречи.

⌨️ Реализация на Python и технические нюансы 29:40

Тим выбрал Python для написания кода. Он начал с создания вспомогательной функции compareTimes для работы со строковыми форматами . Функция переводит время из формата «HH:MM» в общее количество минут от начала дня . Это позволяет выполнять математические сравнения интервалов как обычных целых чисел.

В процессе реализации возникли следующие сложности:

По оценке Тима, временная сложность его решения в среднем составляет O(N + M), где N и M — количество встреч в каждом календаре . Пространственная сложность также линейна, так как алгоритм создаёт новый список для хранения объединённого расписания .

📝 Оценка результатов и обратная связь 53:07

Клеман Михайлеску присвоил Тиму оценку «Strong Hire» (рекомендован к найму), несмотря на мелкие ошибки в коде . Интервьюер отметил, что задача относится к категории очень сложных (Very Hard) на AlgoExpert. Сложность заключается не в самом алгоритме, а в большом количестве входных данных разного типа и необходимости их форматирования .

Клеман Михайлеску выделил сильные стороны кандидата:

Тим признал, что коммуникация во время кодинга мешала ему сосредоточиться на деталях . Клеман Михайлеску подчеркнул: в реальном интервью от кандидата не ждут идеально чистого кода за 45 минут, если задача имеет высокий уровень сложности. Главным фактором успеха стала демонстрация правильного хода мыслей и умение структурировать решение .

💬 Цитаты

«Это именно то, как выглядело бы телефонное интервью в Google, потому что мы использовали Hangouts и Google Docs.»

Клеман Михайлеску 00:41

«Я не чувствую себя великолепно после этого решения, задача была сложной из-за обилия деталей и строк.»

«Сложность этой задачи не столько в алгоритме, сколько в самом процессе написания кода.»

Клеман Михайлеску 55:27
👥 Спикеры
🔗 Упомянутые сайты и проекты
📖 Термины
Военное время (Military time)
24-часовой формат исчисления времени без использования AM/PM.
Strong Hire
Высшая положительная оценка кандидата по результатам технического интервью в крупных ИТ-компаниях.
Сортировка слиянием (Merge sort logic)
Принцип объединения двух уже отсортированных списков за один проход с использованием указателей.
📊 Цифры
🗓 Хронология
  1. 2-3 недели Срок интенсивной подготовки Тима к интервью перед записью ролика.
  2. 45-я минута Окончание времени, выделенного на написание кода задачи.
⚖️ Другая сторона
Технологии и IT Clément Mihailescu AlgoExpert Google Python техническое интервью