Go
средний
LeetCode: приоритетный план
Короткий прикладной план, отдельно от разбора чужого кода выше — не про баги, а про то, что успеть решить руками до собеса.
LeetCode: приоритетный план на 3 дня
С сегодня до понедельника 13:00 — 3 дня. При 30-60 минутах на задачу реалистичны 2-3 в день. 10 приоритетных задач, по одной на паттерн:
- Two Sum (1) — хэш-мапа. Тренирует конкретный рефлекс "обменять время на память": наивное решение за O(n²) перебором пар превращается в O(n) через одну хэш-мапу "значение → индекс" — почти любая задача на "найти пару/дубликат за один проход" сводится к этому же приёму.
- Valid Parentheses (20) — стек. Единственная структура, которая естественно решает "самое недавнее открытое должно закрыться первым" — эта же идея LIFO лежит в основе разбора вложенных выражений, обхода дерева без рекурсии и, неожиданно, в самом
deferв Go. - Best Time to Buy and Sell Stock (121) — sliding window/жадность. Тренирует держать один "текущий минимум" при однопроходном сканировании массива вместо перебора всех пар — тот же паттерн работает в любой задаче "найти лучшую пару (i, j) с i < j" за один проход.
- Reverse Linked List (206) — указатели. Чистая тренировка аккуратной работы с тремя указателями (
prev,curr,next) без потери ссылок — база, без которой не решить ни одну более сложную задачу на связные списки (циклы, слияние, k-групповой разворот). - Binary Search (704) — бинарный поиск. Тренирует не сам алгоритм (он простой), а типичные ошибки в условии выхода и границах (
left <= rightvsleft < right,mid+1/mid-1) — именно эти детали чаще всего ломаются под давлением времени на собесе. - Invert Binary Tree (226) — обход дерева. Каноническая рекурсия на дереве в её самом чистом виде — тренирует сам рефлекс "решить для поддеревьев и скомбинировать", на который потом накладываются все более сложные обходы (BST-валидация, LCA, сериализация).
- Number of Islands (200) — BFS/DFS. Единственная в списке задача на обход графа/сетки — тренирует пометку посещённых клеток и рекурсивный (или через очередь) обход соседей, прямую базу для любой задачи на компоненты связности.
- House Robber (198) — DP. Простейший вид динамики "текущий ответ зависит от двух предыдущих состояний" (
dp[i] = max(dp[i-1], dp[i-2]+nums[i])) — тренирует сам переход к формуле пересчёта, из которого потом растут все более сложные DP-задачи. - Merge Intervals (56) — интервалы. Тренирует специфичный для интервалов приём "сначала отсортировать по началу, потом слить пересекающиеся за один проход" — паттерн, который на практике прямо соответствует реальным задачам вроде объединения занятых слотов календаря.
- Print in Order (1114) — Go-конкурентность (LeetCode Concurrency-раздел). Единственная задача в списке, которая тренирует не алгоритмы, а именно синхронизацию горутин каналами/WaitGroup — максимально близко к формату реального Go-собеса, где "напиши воркер пул руками" ценится выше, чем ещё один алгоритм на массивах.
Если совсем не хватает времени — первые 6 обязательны, последние 4 по возможности. Более широкий список (135 задач по 18 паттернам) уже есть на сайте KB в другой категории (Reference/revision) — здесь не дублируется.
Как усвоено?
Сложность
Вода
ИИ-шность
Фичи движка
Подача