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

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

0. Friendly SWE Guide Manifesto


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

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

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. Массивы

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

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)

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

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

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


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

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

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


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

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

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