Решение задач с LeetCode для глубокого понимания структур данных и алгоритмов.
106 задач · 15 паттернов · 1-й круг завершён.
Обучение идёт тремя кругами. Каждый круг — своя цель.
- Разбор каждой задачи с объяснением идеи.
- Прогон в дебаггере.
- Заметки по паттернам.
- Основной трек: иду по списку вперёд, по 3–5 задач в день.
- Повторение: каждый день 20–30 минут на задачи, которые всплыли в трекере.
- Правило по коду: сначала сам → потом подсказка-идея → потом разбор → потом переписываю сам.
- Заметки: после каждой задачи — 3 строки (паттерн, идея, сложность).
- Решение задач без заметок.
- Только сложные (Medium/Hard) требуют повторного разбора.
Каждая задача проходит через несколько касаний.
Ключевой принцип: следующий интервал считается от даты фактического повторения, а не от даты первого решения.
| Касание | Что происходит | База для следующего |
|---|---|---|
| Старт | Решил задачу впервые | дата решения + 3 дня |
| 2-е | Повторил через 3 дня | дата повторения + 7 дней |
| 3-е | Повторил через 7 дней | дата повторения + 21 день |
| 4-е | Повторил через 21 день | задача «выпущена» |
Интервалы настраиваемые — по умолчанию 3, 7, 21.
Если на повторении не решил сам — задача возвращается в очередь на 1–2 дня
(в трекере: снять/поставить галочку или сбросить прогресс кнопкой ↺).
Если опоздал с повторением — график сдвигается вместе с тобой:
следующая дата считается от того дня, когда ты реально повторил, а не от того, когда должен был.
Опция «Сдвигать повторения с выходных на понедельник» переносит только отображение даты.
Если реальное повторение происходит раньше (например, в субботу), то именно эта дата становится базой для следующего интервала. Сдвиг не «съедает» дни.
Для отслеживания прогресса и интервального повторения используется HTML-трекер — файл tracker.html в корне репозитория.
Список задач
- Список всех 106 задач в правильной последовательности, разбитый по этапам.
- Чекбокс «решено» — отметить задачу решённой. При отметке автоматически ставится сегодняшняя дата.
- Поле даты решения — можно поставить вчерашнюю или любую другую (для отметки задним числом).
- Добавление и удаление задач — с выбором этапа для новых задач.
- Автоматическая нумерация — пересчитывается при добавлении/удалении.
Повторения
- Поле даты повторения — вводишь вручную, если повторял задним числом. Если оставить пустым и нажать ✓, подставится сегодняшняя дата.
- Кнопка ✓ — отметить факт повторения. Записывает дату, сдвигает этап на следующий, пересчитывает следующую дату.
- Кнопка ↺ — сбросить прогресс повторений (начать с этапа 1). Задача остаётся решённой, но интервалы идут заново.
- Индикатор этапа
1/3,2/3,3/3— показывает, сколько повторений уже пройдено. - Статус — следующая дата повторения и пометка «просрочено», если дата уже прошла.
Секция «На сегодня и просроченные»
- Показывает задачи, у которых дата повторения совпала с сегодня или уже прошла.
- Просроченные выделены красным и отсортированы по дате.
- Прямо из секции можно отметить повторение.
Настройки
- Настраиваемые интервалы — по умолчанию
3, 7, 21. Можно изменить на любое количество (например,1, 3, 7, 14, 30). - Дата старта — можно указать, когда начал обучение.
- Сдвиг выходных на понедельник — для тех, кто не занимается в сб/вс.
- Сохранение в localStorage — данные не теряются при обновлении страницы. Сохранения из старых версий подхватываются автоматически.
- Кнопка «Сбросить всё» — полный сброс к дефолтному состоянию.
Статистика
- Сколько задач решено из общего числа.
- Сколько задач нужно повторить сегодня и сколько просрочено.
- Прогресс-бар.
- Скачай файл
tracker.htmlиз репозитория. - Открой его в любом браузере (Chrome, Firefox, Safari, Edge).
- Установи дату старта, интервалы и, если нужно, сдвиг выходных.
- Каждый день:
- решай новые задачи в основном треке и ставь галочку «решено»;
- открывай секцию «На сегодня и просроченные» и отмечай повторения кнопкой ✓;
- если повторял задним числом — впиши дату в поле повторения перед нажатием ✓.
Интернет и установка не нужны — всё работает локально, данные хранятся в браузере.
Дата решения — 23.09 (среда), интервалы 3, 7, 21, сдвиг выходных включён.
| Шаг | Дата | Действие | Что видит трекер |
|---|---|---|---|
| Старт | 23.09 | поставил галочку «решено» | база = 23.09, этап 1/3, следующее = 26.09 → сдвиг на 28.09 |
| Повтор 1 | 28.09 | нажал ✓ (поле пустое = сегодня) | база = 28.09, этап 2/3, следующее = 05.10 |
| Повтор 2 | 05.10 | нажал ✓ | база = 05.10, этап 3/3, следующее = 26.10 |
| Повтор 3 | 26.10 | нажал ✓ | этап 4/3, задача «✅ выпущена» |
Если на шаге 2 ты повторил не 28.09, а 30.09 — просто впиши 30.09 в поле повторения и нажми ✓. Следующая дата станет 30.09 + 7 = 07.10.
Список составлен на основе статистики собеседований:
- 20 паттернов покрывают 94% всех задач.
- 10 паттернов покрывают 80% задач.
- Большинство успешных кандидатов решают 75–150 качественных задач.
- Хеш-таблицы
- Два указателя
- Бинарный поиск
- Сортировка
- Связные списки
- Скользящее окно (Sliding Window)
- Стеки и очереди
- Деревья
- Куча (PriorityQueue)
- Жадные алгоритмы (Greedy)
- Графы (BFS/DFS, Union-Find, Dijkstra)
- Backtracking
- Динамическое программирование
- Префиксные суммы
- Битовые операции
- 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 – Bucket sort
- Product of Array Except Self – Medium – Prefix/Suffix
- Valid Sudoku – Medium – HashSet / boolean[9][9]
- 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 of Deepest Leaves – 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
- 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
- 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
- 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 → 1D DP
- Minimum Path Sum – Medium – 2D DP (Grid 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 – Подсчёт битов по модулю 3
- Sum of Two Integers – Medium – Битовая арифметика
- Number of 1 Bits – Easy – Битовая арифметика / алгоритм Кернигана
- Период: 4 августа — 18 сентября (45 дней).
- Задач разобрано: 106.
- Средний темп: ~2.4 задачи в день.
- Время: ~40–50 часов в неделю (фултайм).