Сначала не задачи, а понимание, чем ты вообще управляешь.
Нужно знать:
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
Цель: видеть не «задачу», а структуру:
что тут хранится, как быстро ищется, как обновляется.
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
Самое важное: тебе нужно не «натаскиваться», а восстановить алгоритмическую карту. Тогда каждая задача перестанет быть случайной стеной и станет вариантом уже известной формы.