О задачах и методичка

Откуда взяты условия, как с ними работать и как понимать шкалы сложности LeetCode и Codewars.

Источники

Задачи — публичные задачи платформ LeetCode и Codewars. Здесь они пересказаны на русском своими словами, с ограничениями и примерами; ссылка на оригинал — в заголовке каждой задачи. Все условия, тесты и названия принадлежат платформам и их авторам, сайт — учебный и некоммерческий.

Формулировки в оригиналах иногда отличаются деталей (что делать с пустым вводом, можно ли использовать деление, в каком формате выводить ответ). Перед отправкой решения сверяйтесь с карточкой задачи и её тестами.

Шкала сложности

LeetCode использует три уровня, Codewars — кю (чем меньше число, тем сложнее). Ориентир такой:

ЗдесьLeetCodeCodewarsчто обычно требуется
Easy Easy 8–7 kyu один проход, готовая структура данных, 5–15 минут
Medium Medium 6–5 kyu нужен правильный приём (окно, стек, мемоизация), 20–40 минут
Hard Hard 4 kyu и ниже комбинация приёмов и нетривиальный инвариант, от часа

Тип задачи → приём

Половина успеха — распознать класс задачи. Шпаргалка:

Если в условии…Смотрите в сторонуСложностьЗадачи здесь
нужна пара с заданной суммой / «встречалось ли значение» хэш-таблица, один проход O(n) Two Sum, Group Anagrams
подмассив/подстрока с свойством, longest/shortest скользящее окно O(n) Longest Substring, Sliding Window Max
«минимум/максимум слева», «максимум окна» префиксные значения, моностек/дек O(n) Best Time to Buy, Product Except Self
строка читается одинаково с двух сторон / два указателя указатели с краёв O(n) Valid Palindrome, Is Subsequence
вложенность, парность скобок, «последнее открытое закрыть первым» стек O(n) Valid Parentheses, Queue via Stacks
список, нельзя дополнительной памяти медленный и быстрый указатели, dummy-узел O(n) / O(1) Reverse List, Linked List Cycle
массив отсортирован (в том числе повёрнут) бинарный поиск O(log n) Binary Search, Rotated Array
подзадача повторяется, ответ складывается из меньших рекурсия + мемоизация, ДП снизу вверх O(n) Climbing Stairs
нужно перебрать все варианты (подмножества, перестановки) бэктрекинг, битовые маски O(2ⁿ) Subsets, Tower of Hanoi

Как заниматься

  • 25 минут без подсказок. Не получается — честно идите дальше по шагам, а не гуглите сразу.
  • Подсказка → ещё 15 минут. Подсказка намеренно не содержит кода, только идею.
  • Разбор решения. Сравните со своим: чаще разница не в синтаксисе, а в инварианте цикла.
  • Пересказ своими словами. Сформулируйте приём одним предложением — так он становится вашим.
  • Повтор через 2–3 дня и заново через 2 недели, с нуля, без подглядывания.
  • Считайте сложность вслух после каждого решения: время и память, с обоснованием.
Порядок тем. Массивы и хэш-таблицы → строки → списки и стеки → рекурсия, ДП и бинарный поиск. Каждая следующая тема опирается на приёмы из предыдущих.

Что дальше

Когда эти девятнадцать задач решаются с первого раза за отведённое время, логичные следующие шаги: деревья и обходы (LeetCode 104, 226, 98), графы и BFS/DFS (200, 133), куча и топ-k (215, 347), динамическое программирование на подпоследовательностях (1143, 300) и скользящее окно с ограничениями (76, 239 уже было здесь).

Про сайт

Только статический HTML и CSS: ни сборки, ни зависимостей, ни скриптов. Открывается двойным кликом по index.html, живёт где угодно — хоть в git pull, хоть на любом статическом хостинге. Подсказки и решения свёрнуты в нативные <details>; печать страницы даёт бумажный вариант задач со спрятанными решениями.