Сначала не задачи, а понимание, чем ты вообще управляешь.
Нужно знать:
Big O:O(1),O(log n),O(n),O(n log n),O(n²)- массивы / списки
- строки
- hash map / hash set
- stack / queue / deque
- linked list
- heap / priority queue
- tree / binary tree / BST
- graph
- trie
- disjoint set union
Связанные материалы из раздела алгоритмов:
- Big O — оценка роста алгоритма и различие worst-case, average-case, expected и amortized.
- Linear space — что значит дополнительная память
O(n). - Array — индексированная последовательность элементов.
- Stack — структура с доступом к последнему добавленному элементу.
- Sorted array — как использовать отсортированный массив.
- Frequency map — hash map как словарь частот.
- Seen set — hash set для проверки, встречался ли элемент раньше.
- Grouping — hash map для раскладывания элементов по группам.
- Lookup O(1) — быстрый доступ по ключу в hash map и hash set.
- Min Stack — стек с быстрым
getMin()заO(1). - Monotonic stack — стек, который хранит кандидатов в возрастающем или убывающем порядке.
- Valid Parentheses — базовая задача на стек и порядок закрытия скобок.
- Two pointers — базовый паттерн работы с массивами и строками.
- Sliding window — окно поверх массива, строки или потока.
- Prefix sum — быстрые суммы на отрезках.
- Difference array — быстрые массовые обновления диапазонов.
- Sorting + scan — сортировка и один проход по данным.
- Intervals — работа с диапазонами.
- In-place modification — изменение массива без дополнительной структуры.
Цель: видеть не «задачу», а структуру:
что тут хранится, как быстро ищется, как обновляется.
2. Паттерны задач, а не отдельные задачи
Вот это ключевое. LeetCode надо учить не как «1000 задач», а как набор повторяющихся схем.
Блок 1. Arrays / Strings
- two pointers
- sliding window
- prefix sum
- difference array
- sorting + scan
- intervals
- in-place modification
Примеры тем:
- найти пару / тройку
- убрать дубликаты
- максимум/минимум окна
- подмассив с условием
- объединение интервалов
Блок 2. Hashing
- frequency map
- seen set
- grouping
- lookup за
O(1)
Примеры:
- anagram groups
- two sum
- longest consecutive sequence
- first unique character
Блок 3. Stack / Queue
- monotonic stack
- valid parentheses
- next greater element
- min stack
- BFS queue
Особенно важен monotonic stack — он часто выглядит магией, пока не увидишь паттерн.
Блок 4. Binary Search
Не только «найти число в массиве», а:
- binary search on answer
- lower bound / upper bound
- search in rotated array
- capacity / minimum possible maximum
- first true / last false
Это один из самых важных блоков для собесов.
Блок 5. Recursion / Backtracking
- subsets
- permutations
- combinations
- DFS через выбор
- pruning
Важно понять схему:
choose
explore
undo
Блок 6. Trees
- DFS preorder / inorder / postorder
- BFS level order
- recursion over tree
- path sum
- lowest common ancestor
- validate BST
- serialize / deserialize tree
Деревья — это место, где recursion становится нормальной, а не страшной.
Блок 7. Graphs
- BFS
- DFS
- visited set
- connected components
- cycle detection
- topological sort
- shortest path
- Dijkstra
- Union-Find
Графы — это не отдельная структура. Это модель отношений. Очень мощный блок.
Блок 8. Dynamic Programming
Вот тут нельзя начинать сразу с хардов.
Идти надо так:
- recursion
- recursion + memo
- bottom-up DP
- space optimization
Темы:
- Fibonacci-like
- climbing stairs
- house robber
- coin change
- longest increasing subsequence
- longest common subsequence
- knapsack
- grid DP
- interval DP
Главная формула DP:
state
transition
base case
answer
3. Порядок прохождения
Я бы сделал так:
Этап 1 — 2 недели
База:
- Big O
- arrays
- strings
- hash map
- stack
- queue
- sorting
- two pointers
- sliding window
Цель: выйти из состояния «я не понимаю, что вообще происходит».
Этап 2 — 3 недели
Средний фундамент:
- binary search
- linked list
- trees
- recursion
- backtracking
Цель: начать видеть повторяющиеся формы задач.
Этап 3 — 3 недели
Сильная середина:
- graphs
- BFS / DFS
- topological sort
- heap
- intervals
- monotonic stack
- union-find
Цель: закрыть основное тело interview-задач.
Этап 4 — 4 недели
DP:
- memoization
- 1D DP
- 2D DP
- knapsack
- LIS
- LCS
- grid DP
Цель: перестать бояться DP и видеть его как таблицу смысловых состояний.
4. Как заниматься каждый день
Не «решать побольше», а так:
Один день:
- Берёшь один паттерн.
- Читаешь короткое объяснение.
- Разбираешь 2 простые задачи.
- Решaешь 2–3 сам.
- После решения выписываешь шаблон.
Например:
Sliding window:
- есть левый и правый указатель
- расширяем окно
- если условие нарушено — двигаем левый
- обновляем ответ
Вот это и есть настоящее обучение.
5. Минимальный набор задач
Не надо сразу 500.
Нужно примерно:
- 30 easy
- 80 medium
- 20 hard
Но не подряд, а по темам.
То есть не:
случайная задача → случайная задача → случайная задача
А:
10 задач на sliding window
10 задач на binary search
10 задач на trees
10 задач на graphs
...
6. Главная программа
Я бы назвал её так:
Algorithmic Core
Модуль 1. Complexity and Data Structures
Модуль 2. Arrays and Strings
Модуль 3. Hashing
Модуль 4. Two Pointers and Sliding Window
Модуль 5. Stack, Queue, Monotonic Structures
Модуль 6. Binary Search
Модуль 7. Recursion and Backtracking
Модуль 8. Linked Lists
Модуль 9. Trees
Модуль 10. Graphs
Модуль 11. Heap and Priority Queue
Модуль 12. Intervals
Модуль 13. Union-Find
Модуль 14. Dynamic Programming
Модуль 15. Mixed Interview Practice
Самое важное: тебе нужно не «натаскиваться», а восстановить алгоритмическую карту. Тогда каждая задача перестанет быть случайной стеной и станет вариантом уже известной формы.