Найти в Дзене
Learning to Python

Как решить 500 задач на LeetCode?

Всем привет! Есть простая и классная, как мне кажется, метафора достигательства. Звучит она так: «Как съесть слона??? По кусочкам…» Здесь есть все что нужно: и амбициозная (большая) цель – слон, и ощущение «неподъемности» задачи – невозможно съесть слона целиком, и четкий план действий – «по кусочкам», и даже подразумеваемое постоянство, ведь есть придется долго. Правда, кто-то скажет: «Но ведь слоника жалко…» Переходя от метафор к персоналиям, моя цель изучение Python на таком уровне, когда я смогу эффективно применять его в своей работе. И что-то из этого уже получилось. Хотя мой «слон» постоянно меняет свои размеры, по мере изучения «кусочков» открываются новые, неизвестные ранее части «питонового» туловища. В качестве «кусочков» у меня выступают задачи на LeetCode, еще обучалки и обзоры на Youtube, помощь коллег, документация и т.д. Решение задач на LeetCode является основой диеты и это уже вошло в привычку, стало ежедневной рутиной, но по прежнему интересной и полезной. Первую

Всем привет!

Есть простая и классная, как мне кажется, метафора достигательства. Звучит она так:

«Как съесть слона??? По кусочкам…»

Здесь есть все что нужно: и амбициозная (большая) цель – слон, и ощущение «неподъемности» задачи – невозможно съесть слона целиком, и четкий план действий – «по кусочкам», и даже подразумеваемое постоянство, ведь есть придется долго. Правда, кто-то скажет: «Но ведь слоника жалко…»

Переходя от метафор к персоналиям, моя цель изучение Python на таком уровне, когда я смогу эффективно применять его в своей работе. И что-то из этого уже получилось. Хотя мой «слон» постоянно меняет свои размеры, по мере изучения «кусочков» открываются новые, неизвестные ранее части «питонового» туловища. В качестве «кусочков» у меня выступают задачи на LeetCode, еще обучалки и обзоры на Youtube, помощь коллег, документация и т.д.

Решение задач на LeetCode является основой диеты и это уже вошло в привычку, стало ежедневной рутиной, но по прежнему интересной и полезной. Первую задачу там я решил чуть больше года назад 4 мая 2023 года. Вчера решил пятисотую задачу. Получается в течение этого года я съедал в среднем по 1.26 задачи. Это не всегда было легко, особенно сначала, так сказать, войти в режим. Добиться постоянства от самого себя было сложно, в какой-то момент я забросил LeetCode почти на месяц. Но затем все пошло по накатанной, был найден правильный режим (решать задачу с утра, до всех остальных дел) и сейчас у меня непрерывная серия из 255 дней. Со временем пошло постепенное ускорение, первую сотню задач решал со скоростью 0,89 задач в день, вторую – 1,14, третью – 1,45, четвертую – 1,8, на пятой немного замедлился – 1,4 задач в день.

Сейчас моя страничка в LeetCode выглядит так:

-2

За это время я научился синтаксису питона, изучил основные структуры данных и алгоритмы, освоил несколько популярных библиотек. Научился процедурному и немножко объектно-ориентированному программированию. Наконец, просто могу (в большинстве случаев) прочитать чужой код на Питоне. Многое теперь знакомо и привычно для меня, даже программерские термины и аббревиатуры больше не пугают: Binary tree, Linked List, Weighted Graph, DFS, BFS, Рекурсия, Stack, Heap, deque, backtracking и т.д., все это теперь что-то значит для меня.

Открылся новый пласт мемов:

-3
-4

При этом я никуда не спешу, выбираю «кусочки», которые могу прожевать. Большинство решенных задач простые 313 из 500, 172 – задачи среднего уровня и только 15 сложных. Только в последние несколько месяцев количество решенных задач среднего и легкого уровня сравнялось, а сложные задачи все еще редки. Переход от легких к средним задачам был достаточно плавным. Просто накопилось достаточно знаний и навыков, подходов и методов. Теперь читая описание задачи, я прикидываю какие структуры данных я могу использовать, какие алгоритмы подойдут в этом случае, чем эта задача похожа на другие или в чем её отличие от остальных таких же. Конечно, попадаются и новые, сложные концепции, например недавно я довольно долго вникал в алгоритм backtracking, буквально заставлял себя по памяти переписывать вчерашний код, чтобы лучше разобратся и «набить» руку.

Дополнительным маркером прогресса является то, что я могу решить большинство задач из ежедневного челленджа. Теперь я не ищу «какую бы задачу мне решить?», а просто захожу в ежедневный челлендж. Задачи там подобраны по темам и от простых к сложным, в начале недели легкие на выходных сложные. В течение месяца можно познакомиться и глубже узнать две-три концепции (я так узнал о графах и backtracking). Если задачи совсем сложные, и я их не понимаю, то обычно решаю простые задачи из этой темы и после возвращаюсь к пропущенной.

Сейчас на LeetCode около 3200 задач, 4-5 новых задач появляется еженедельно, в текущем темпе мне понадобится лет восемь, чтобы решить их все. Хотя может быть через какое-то время я решу, что уже достаточно, ничего интересного тут уже нет и найду что-то новое. Может быть так и буду решать по одной – две задачи в день, пока они все не закончатся. Но самое главное я буду продолжать приближаться к своей цели, в своем темпе, ни за кем не гонясь, ни кого не обгоняя. Рано или поздно слон будет съеден, Python и другие инструменты программирования займут свое место в моей повседневной работе. А LeetCode никуда не денется, он так и останется удобным подспорьем для начинающих и не только программистов.

Год, проведенный с LeetCode, я считаю очень полезным, останавливаться не собираюсь, сейчас хочу добить безостановочную серию до 365 дней. Осталось не так уж и много. Ну а там посмотрим, что к чему...

Спасибо, что продолжаете все это читать, что вам интересны мои новости, размышления и достижения. До скорого…

Телеграмм https://t.me/learningtopython

LeetCode https://leetcode.com/u/KapJIcoHH/