О задачах и методичка
Откуда взяты условия, как с ними работать и как понимать шкалы сложности LeetCode и Codewars.
Источники
Задачи — публичные задачи платформ LeetCode и Codewars. Здесь они пересказаны на русском своими словами, с ограничениями и примерами; ссылка на оригинал — в заголовке каждой задачи. Все условия, тесты и названия принадлежат платформам и их авторам, сайт — учебный и некоммерческий.
Формулировки в оригиналах иногда отличаются деталей (что делать с пустым вводом, можно ли использовать деление, в каком формате выводить ответ). Перед отправкой решения сверяйтесь с карточкой задачи и её тестами.
Шкала сложности
LeetCode использует три уровня, Codewars — кю (чем меньше число, тем сложнее). Ориентир такой:
| Здесь | LeetCode | Codewars | что обычно требуется |
|---|---|---|---|
| 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>; печать страницы даёт
бумажный вариант задач со спрятанными решениями.