С начала января я завел себе странную привычку — решаю задачки на LeetCode каждый день. Хотя, это пока сложно назвать привычкой, поскольку бывают дни когда нужно заставлять себя это делать. Толчком стал тред в вастрик клубе, где люди делились своими профилями и прогрессом. Вообще, лет пять назад я уже баловался с алгоритмическими задачами, но на сodewars.

Чтобы не мучиться с выбором задач, взял готовый план LeetCode 75. Это удобно: задачи идут по темам — массивы, строки, деревья, скользящие окна и все такое. Сразу понимаешь, какой подход или структуру данных нужно применить. За месяц я решил около 50 задач уровня Medium и Easy. Темп примерно 1–2 задачи в день. В какие то дни не было времени или сил, тогда решал что-нибудь совсем простое за 5-10 минут.

По моим наблюдениям, в LeetCode есть задачи, которые отнимают кучу времени не потому, что решение сложное, а из-за специфичных условий. Их либо сложно понять, либо легко понять неправильно. Часто не хватает простого и наглядного примера того, что подается на вход и что должно получиться на выходе — и все стало бы понятно. Один из ярких примеров — задача 649. Dota2 Senate. Я раз десять перечитывал условие и лез в комментарии.

Но есть и приятные задачи, которые внезапно решались минут за пять, хотя их уровень был заявлен как Medium. Особенно понравились те, где идет постепенное усложнение типа Path Sum, II, III.

Я решаю задачки на Scala — это язык, которым пользуюсь практически каждый день, так что проще не отвлекаться на синтаксис. Был соблазн взяться за что-то типа Golang или Rust для разнообразия, но потом подумал: «Не сегодня». Вероятно, позже захочу сменить язык.

Кстати, изначально я пытался решать задачи в строгом функциональном стиле — без переменных и циклов, только иммутабельность и монадки. Это, конечно, красиво, но быстро понял, что жизнь слишком коротка для таких мучений. Задачки гораздо проще решаются с переменными и циклами, что убедило моего внутреннего фпшника смириться с этим.

Лично мне процесс решения задачек приносит удовольствие. Получил зеленую галочку после прохождения тестов — и вот тебе дофаминчик. Заодно и мозги неплохо размялись. Вспомнил/узнал новые алгоритмы/подходы. Пока планирую продолжать, хотя не уверен в том, что это продлится долго.