[Перевод] Как прорешать тысячу задач на Leetcode за тритса дней

Привет, меня зовут Мэнси Эгэрвэл, я контент-менеджер в компании Favtutor. Недавно я добралась до отметки в тысячу решенных задач на Leetcode, и подумала, что хорошо бы поделиться своим опытом с другими.

В прошлом мой интерес часто привлекали зеленые метки и разнообразные значки в профилях у других людей, а теперь у меня самой есть такие. Вот как выглядит мой профиль на Leetcode в данный момент.

gw4gztdpewidfluy4dnmjwov800.jpeg

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

557vibqxrvtzwufvnag24qlgufg.jpeg

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

Как мне удалось преодолеть рубеж в тысячу задач?


Прорешать тысячу задач — дело непростое. В определенный момент начинаешь скучать и возникает желание приняться за исследование других областей. Тем не менее для достижения своей цели придется вложить время и труд.

Я начала писать код на первом курсе. Тогда многие среди моих однокурсников боролись за страйки на Snapchat. Тогда-то мне и пришла в голову мысль удерживать страйки на Codeforces, а впоследствии и на Leetcode. Страйки помогали мне при помощи простых цифр сохранять регулярность и не отступаться от задуманного.

Погружаться в тему. Я завела привычку: изучая новую тему, решать три-четыре задачи по ней ежедневно — это помогало лучше ее проработать. После того как мне удавалось найти рабочее решение, я обычно знакомилась и с другими подходами, чтобы понять, какой из них является оптимальным.

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

Планы я составляла таким образом: по прошествии некоторого времени заносила данные на Google Docs, что помогало оценивать прогресс также и по месяцам. Да, к слову, скажу сразу, прежде чем кто-то осудит: почерк у меня… в общем, я над этим работаю.

uupadbdafvqf3kodplkdtmemlhc.jpeg

Возвращаться к замысловатым задачам. Сначала я по два-три часа билась над некоторыми задачами, которые в итоге так и оставались нерешенными. В конце концов приходилось заглядывать в решения. Затем я выстроила другую схему: если мне не удается самостоятельно справиться с задачей за полчаса, я смотрю решение. Такие задачи я заносила в специальный список, и еще раз проходилась по ним по утрам. Эта практика оказалась очень благотворной для моего продвижения в разработке.

Держаться того, что работает. Когда-то я постоянно перескакивала между разными вебсайтами, посвященными программированию. Толку от этого было мало — я решала одни и те же задачи в разных местах. В итоге ничему новому я не училась. Лучше найти одну платформу, которая вам по душе, и оставаться на ней. Для тех, кто готовится к собеседованиям, Leetcode — подходящий выбор.

Ошибки, которые я допускала в процессе обучения


Не застревать на одной задаче. Одна из самых серьезных моих ошибок — склонность уделять слишком много времени одной задаче. Если за 15–20 минут никак не удалось продвинуться, загляните в подсказки. Если по истечению часа вы все еще в тупике, ищите решение в обсуждениях.

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

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

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

Полезные инструменты, которые ускорили мой прогресс


Leetcode Big Omega: Это расширение для Google Chrome, которое выводит тэги компаний. Когда я готовилась к собеседованию в определенной компании, то могла отбирать задачи, которые там используются. Это расширение существенно облегчило для меня подготовку.

dhvftz8gfvrs9rckvoe9coplh3w.jpeg

Таймер для экрана. Я стала запускать на телефоне таймер, особенно для тех приложений, в которых просиживаю подолгу. Таймер принудительно закрывал приложение, когда дневной лимит оказывался исчерпан. Благодаря этому я экономила массу времени.

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

km2_az3vd50mpm6bx_v02d1u9wy.jpeg

Заключение


То, что я решила тысячу задач на Leetcode, само по себе не имеет значения — важно то, научилась ли я их решать в кратчайшие сроки. На этапе собеседования, посвященном написанию кода, на решение трех задач дают лишь полтора часа. Постарайтесь избегать моих ошибок и неустанно исследуйте LeetCode Discuss — там можно найти много ценных сведений.

Habrahabr.ru прочитано 11062 раза