Решение задач с LeetCode для глубокого понимания структур данных и алгоритмов.
108 задач · 15 паттернов.
Я прохожу все задачи последовательно, по этапам.
На каждом этапе разбираю новые темы и структуры данных.
После завершения всего списка я начинаю новый круг — решаю все задачи заново, постепенно уменьшая количество подсказок.
Так я повторяю материал, пока паттерны не становятся естественными.
Этот список — не случайный набор. Он составлен на основе реальной статистики собеседований и проверен на практике.
Анализ тысяч реальных интервью показывает, что:
- 20 паттернов покрывают 94% всех задач на собеседованиях.
- 10 паттернов покрывают 80% задач.
- Большинство успешных кандидатов решают 75–150 качественных задач, а не 500 случайных.
- Некоторые авторы утверждают, что 50 задач могут покрыть 90% интервью, но 108 дают полную картину.
Всего в плане 15 паттернов, которые покрывают все ключевые темы:
- Хеш-таблицы
- Два указателя
- Бинарный поиск
- Сортировка
- Связные списки
- Скользящее окно (Sliding Window)
- Стеки и очереди
- Деревья
- Куча (PriorityQueue)
- Жадные алгоритмы (Greedy)
- Графы (BFS/DFS, Union-Find, Dijkstra)
- Backtracking
- Динамическое программирование
- Префиксные суммы
- Битовые операции
Каждый этап в списке задач соответствует одному или нескольким из этих паттернов.
| Паттерн | Частота появления |
|---|---|
| Два указателя | 23% |
| Динамическое программирование | 18% |
| BFS/DFS (графы и деревья) | 16% |
| Скользящее окно | 14% |
| Бинарный поиск | 12% |
| Хеш-таблицы | основа большинства задач |
План построен так, чтобы вести от простого к сложному:
- Освоить один паттерн через 8–12 задач.
- Научиться узнавать этот паттерн в разных условиях.
- Комбинировать несколько паттернов в одной задаче.
Этот подход даёт глубокое понимание, а не заучивание решений.
- Two Sum – Easy – HashMap
- Contains Duplicate – Easy – HashSet
- Valid Anagram – Easy – HashMap / int[26]
- Group Anagrams – Medium – HashMap + сортировка
- Longest Consecutive Sequence – Medium – HashSet
- Top K Frequent Elements – Medium – HashMap + bucket
- Product of Array Except Self – Medium – Prefix / suffix
- Valid Sudoku – Medium – HashSet для строк/колонок/блоков
- Best Time to Buy and Sell Stock – Easy – Отслеживание минимума
- Maximum Subarray – Medium – Kadane's algorithm
- Merge Intervals – Medium – Сортировка + слияние
- Insert Interval – Medium – Вставка + слияние
- Valid Palindrome – Easy – Два указателя
- Two Sum II – Medium – Два указателя
- 3Sum – Medium – Два указателя + дубликаты
- Container With Most Water – Medium – Жадные два указателя
- Trapping Rain Water – Hard – Два указателя / стек
- Move Zeroes – Easy – Read/Write pointers
- Remove Duplicates from Sorted Array – Easy – In-place два указателя
- Longest Substring Without Repeating – Medium – Sliding window
- Longest Repeating Character Replacement – Medium – Sliding window + freq
- Minimum Size Subarray Sum – Medium – Variable window
- Find All Anagrams in a String – Medium – Fixed window + HashMap
- Max Consecutive Ones III – Medium – Variable window с K заменами
- Binary Search – Easy – Классика
- Search a 2D Matrix – Medium – Бинарный поиск в матрице
- Search in Rotated Sorted Array – Medium – Поиск в сдвинутом массиве
- Search in Rotated Sorted Array II – Medium – С дубликатами
- Find Minimum in Rotated Sorted Array – Medium – Поиск минимума
- Koko Eating Bananas – Medium – Поиск по ответу
- Capacity To Ship Packages – Medium – Поиск по ответу
- Median of Two Sorted Arrays – Hard – Бинарный поиск на двух массивах
- Reverse Linked List – Easy – Итеративный + рекурсивный реверс
- Merge Two Sorted Lists – Easy – Слияние
- Linked List Cycle – Easy – Fast & slow pointers
- Linked List Cycle II – Medium – Найти начало цикла
- Remove Nth Node From End – Medium – Два указателя с отступом
- Reorder List – Medium – Середина + реверс + слияние
- Merge k Sorted Lists – Hard – PriorityQueue
- Reverse Nodes in k‑Group – Hard – Реверс группами
- Valid Parentheses – Easy – Stack
- Min Stack – Medium – Stack с минимумом
- Evaluate Reverse Polish Notation – Medium – Стек для вычислений
- Generate Parentheses – Medium – Backtracking + стек
- Daily Temperatures – Medium – Монотонный стек
- Largest Rectangle in Histogram – Hard – Монотонный стек
- Sliding Window Maximum – Hard – Deque (монотонная очередь)
- Decode String – Medium – Стек для вложенных строк
- Maximum Depth of Binary Tree – Easy – DFS / рекурсия
- Same Tree – Easy – Сравнение деревьев
- Invert Binary Tree – Easy – Рекурсия
- Binary Tree Level Order Traversal – Medium – BFS (очередь)
- Validate Binary Search Tree – Medium – Inorder или min/max
- Kth Smallest in BST – Medium – Inorder traversal
- Construct Binary Tree from Preorder/Inorder – Medium – Рекурсивное построение
- Binary Tree Maximum Path Sum – Hard – DFS + максимум пути
- Serialize and Deserialize Binary Tree – Hard – BFS/DFS + сериализация
- Lowest Common Ancestor – Medium – LCA
- Subtree of Another Tree – Easy – Проверка поддерева
- Diameter of Binary Tree – Easy – DFS + диаметр
- Kth Largest Element in an Array – Medium – Min-Heap / QuickSelect
- Kth Largest Element in a Stream – Easy – Min-Heap фиксированного размера
- Last Stone Weight – Easy – Max-Heap (PriorityQueue с reverse)
- K Closest Points to Origin – Medium – Min-Heap / Max-Heap
- Jump Game – Medium – Greedy
- Jump Game II – Medium – Greedy + BFS
- Task Scheduler – Medium – Greedy + Heap
- Meeting Rooms II – Medium – Heap / сортировка
- Number of Islands – Medium – DFS / BFS на матрице
- Max Area of Island – Medium – DFS / BFS
- Clone Graph – Medium – DFS / BFS + HashMap
- Course Schedule – Medium – Топологическая сортировка
- Course Schedule II – Medium – Топологическая сортировка
- Pacific Atlantic Water Flow – Medium – DFS с двух сторон
- Rotting Oranges – Medium – BFS (Multi-source)
- Word Ladder – Hard – BFS на графе слов
- Network Delay Time – Medium – Dijkstra
- Min Cost to Connect All Points – Medium – Union-Find / MST
- Number of Provinces – Medium – Union-Find / DFS
- Redundant Connection – Medium – Union-Find
- Subsets – Medium – Backtracking — основа
- Subsets II – Medium – С дубликатами
- Permutations – Medium – Backtracking с visited
- Permutations II – Medium – С дубликатами
- Combination Sum – Medium – Backtracking с повторениями
- Combination Sum II – Medium – Без повторений
- Letter Combinations of a Phone Number – Medium – Backtracking
- N-Queens – Hard – Backtracking на доске
- Climbing Stairs – Easy – 1D DP
- House Robber – Medium – 1D DP
- House Robber II – Medium – 1D DP + circular
- Longest Palindromic Substring – Medium – 2D DP
- Longest Common Subsequence – Medium – 2D DP
- Longest Increasing Subsequence – Medium – 1D DP + binary search
- Partition Equal Subset Sum – Medium – 0/1 Knapsack
- Coin Change – Medium – Unbounded Knapsack
- Coin Change II – Medium – Unbounded (количество способов)
- Word Break – Medium – 1D DP + HashSet
- Decode Ways – Medium – 1D DP
- Unique Paths – Medium – 2D DP
- Minimum Path Sum – Medium – 2D DP
- Edit Distance – Hard – 2D DP
- Range Sum Query - Immutable – Easy – Prefix sum
- Subarray Sum Equals K – Medium – Prefix sum + HashMap
- Single Number – Easy – XOR
- Single Number II – Medium – Битовые операции
- Sum of Two Integers – Medium – Битовая арифметика
- Number of 1 Bits – Easy – Битовая арифметика
- 10–15 минут самостоятельной попытки решить задачу.
- Если не выходит — смотрю объяснение (не код), затем пишу своё решение.
- После прохождения всех 108 задач начинаю новый круг — решаю всё заново, с каждым разом всё больше полагаясь на себя.
⭐ Этот метод помогает мне постепенно и глубоко освоить алгоритмы.