Здравствуйте, товарищи!

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

0. Friendly SWE Guide Manifesto

  • У меня есть документ, в котором я собираю дельные советы начинающим программистам. Там про настройку рабочей среды и всего такого. Иногда добавляю туда что-то новенькое. Комментарии приветствуются.

1. Бинарный поиск

Описание задачи: Классический алгоритм поиска элемента в отсортированном массиве за логарифмическое время $O(\log n)$. Разбор фокусируется на правильной работе с границами интервала и избежании переполнения int.

  • 📺 Видео-разбор: Теория и практика
  • 📝 Задача на LeetCode: Binary Search
  • 💡 Мое решение и заметки: Код и замечания
  • 🏠 Домашнее задание: Реализовать поиск самого левого и самого правого вхождения элемента (см. заметки).

2. Быстрое возведение в степень

Описание задачи: Алгоритм вычисления $x^n$ за $O(\log n)$. Обсуждаем рекурсивный и итеративный подходы, а также обработку отрицательных степеней.

  • 📺 Видео-разбор: Теория
  • 📝 Задача на LeetCode: Pow(x, n)
  • 💡 Мое решение и заметки: Иллюстрация алгоритма справа
Алгоритм быстрого возведения в степень

3. Задача о кузнечике

Описание задачи: Введение в динамическое программирование (одномерный случай). Решаем задачу о количестве способов добраться до ступеньки $n$, прыгая на 1 или 2 шага.

  • 📺 Видео-разбор: Теория
  • 📝 Задача на LeetCode: Climbing Stairs
  • 💡 Мое решение и заметки: Формула и связь с Фибоначчи справа
Задача о кузнечике и числа Фибоначчи

4. Задача о водопаде (Trapping Rain Water)

Описание задачи: Задача на нахождение объема воды, который может удержаться между столбиками разной высоты. Разбираем эффективный подход с двумя указателями.

5. Проверка IP-адреса

Описание задачи: Задача на аккуратную работу со строками и валидацию данных. Проверяем, является ли строка корректным IPv4-адресом.


6. Связные списки (Linked List)

Общая теория: Видео по структурам данных

6.1. Проектирование списка

Описание: Реализация односвязного списка "с нуля". Учимся управлять указателями, добавлять и удалять элементы в разных частях списка.

6.2. Переворот списка

Описание: Классическая задача на изменение направления связей в списке. Разбираем как итеративный, так и рекурсивный способы.

6.3. Цикл в списке

Описание: Определение наличия цикла и нахождение точки входа в цикл.

6.4. Слияние списков

Описание: Объединение двух отсортированных связных списков в один новый отсортированный список.


7. Массивы

Общая теория: Видео по работе с массивами

  • 7.1. Пересечение массивов Описание: Нахождение общих элементов в двух массивах. Разбираем подходы с использованием Hash Map и сортировки.

  • 7.2. k-ая порядковая статистика Описание: Поиск k-го по величине элемента в неотсортированном массиве. Разбираем алгоритм Quick Select со средним временем $O(n)$.

8. Перебор (Backtracking)

Описание задачи: Метод поиска решений путем полного перебора вариантов с отсечением неперспективных ветвей. Используется для задач типа "N королев", генерации перестановок или поиска путей в графе.


9. Бинарные деревья

Общая теория: Видео по деревьям

9.1. Проверка на BST (Binary Search Tree)

Описание: Проверка того, является ли дерево корректным деревом поиска (для каждого узла все левые потомки меньше, а правые — больше).

9.2. Работа с BST

Описание: Базовые операции in дерево поиска.

9.3. Наименьший общий предок (LCA)

Описание: Поиск самого "глубокого" узла в дереве, который является предком для двух данных узлов.

9.4. Десериализация дерева

Описание: Восстановление структуры бинарного дерева по результатам двух его обходов (например, Inorder и Postorder).


10. Бор (Trie)

Описание: Реализация префиксного дерева — структуры данных для эффективного хранения и поиска строк. Незаменим в задачах автодополнения и проверки орфографии.

11. Графы

Описание: Основы теории графов: способы представления (матрица смежности, списки смежности) и базовые понятия.

12. Комбинаторика

Описание: Генерация перестановок. Изучаем алгоритм нахождения следующей в лексикографическом порядке перестановки.

13. Два указателя (Two Pointers)

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

  • 13.1. Minimum Window Substring Описание: Поиск кратчайшей подстроки, содержащей все символы заданного набора. Задача на технику "скользящего окна".

  • 13.2. Сумма двух элементов Описание: Нахождение в отсортированном массиве двух чисел, сумма которых равна заданному значению.

14. Динамическое программирование (Advanced)

Описание: Метод решения сложных задач путем разбиения их на более простые подзадачи с сохранением промежуточных результатов.


15. Разделяй и властвуй

Описание: Стратегия решения задачи путем её рекурсивного разбиения на две или более подзадачи того же типа. Разбираем на примере вычисления всех возможных результатов расстановки скобок в выражении.

16. Комплексные задачи (Бор + Перебор + ДП)

  • Описание: Задача про расстановку пробелов в строке (Word Break II). Требует интеграции нескольких подходов для эффективного решения.
  • 📺 Видео-разбор:
  • 📝 Задача на LeetCode: Word Break II
  • 💡 Мое решение: Gist с кодом

Продвинутые и интересные темы

Теория вероятностей

Описание: Разбор нестандартных задач, требующих применения основ теории вероятностей и математического ожидания в контексте программирования.


This site uses Just the Docs, a documentation theme for Jekyll.