MBL
Go / avito / Повторение / LeetCode: приоритетный план
Go средний

LeetCode: приоритетный план

leetcode

Короткий прикладной план, отдельно от разбора чужого кода выше — не про баги, а про то, что успеть решить руками до собеса.

LeetCode: приоритетный план на 3 дня

С сегодня до понедельника 13:00 — 3 дня. При 30-60 минутах на задачу реалистичны 2-3 в день. 10 приоритетных задач, по одной на паттерн:

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

Если совсем не хватает времени — первые 6 обязательны, последние 4 по возможности. Более широкий список (135 задач по 18 паттернам) уже есть на сайте KB в другой категории (Reference/revision) — здесь не дублируется.

Как усвоено?