[Перевод] Как прорешать тысячу задач на Leetcode за тритса дней
Привет, меня зовут Мэнси Эгэрвэл, я контент-менеджер в компании Favtutor. Недавно я добралась до отметки в тысячу решенных задач на Leetcode, и подумала, что хорошо бы поделиться своим опытом с другими.
В прошлом мой интерес часто привлекали зеленые метки и разнообразные значки в профилях у других людей, а теперь у меня самой есть такие. Вот как выглядит мой профиль на Leetcode в данный момент.
Однако, если взглянуть на статистику за 2022 год, то там не обнаружится почти ничего. Как можно видеть, произошли серьезные перемены!
Ниже вы найдете несколько уроков, которые я вынесла для себя, и ошибок, которых следует избегать, чтобы не тратить зря время и силы.
Как мне удалось преодолеть рубеж в тысячу задач?
Прорешать тысячу задач — дело непростое. В определенный момент начинаешь скучать и возникает желание приняться за исследование других областей. Тем не менее для достижения своей цели придется вложить время и труд.
Я начала писать код на первом курсе. Тогда многие среди моих однокурсников боролись за страйки на Snapchat. Тогда-то мне и пришла в голову мысль удерживать страйки на Codeforces, а впоследствии и на Leetcode. Страйки помогали мне при помощи простых цифр сохранять регулярность и не отступаться от задуманного.
Погружаться в тему. Я завела привычку: изучая новую тему, решать три-четыре задачи по ней ежедневно — это помогало лучше ее проработать. После того как мне удавалось найти рабочее решение, я обычно знакомилась и с другими подходами, чтобы понять, какой из них является оптимальным.
Отслеживать прогресс по дням. В процессе трудоустройства я стала записывать цели на день, это способствовало эффективному распределению времени. Составление ежедневных планов лучше не откладывать: оно может дать многие преимущества. Они не только помогают распоряжаться временем, но еще и позволяют отслеживать, сколько сделано за определенный день.
Планы я составляла таким образом: по прошествии некоторого времени заносила данные на Google Docs, что помогало оценивать прогресс также и по месяцам. Да, к слову, скажу сразу, прежде чем кто-то осудит: почерк у меня… в общем, я над этим работаю.
Возвращаться к замысловатым задачам. Сначала я по два-три часа билась над некоторыми задачами, которые в итоге так и оставались нерешенными. В конце концов приходилось заглядывать в решения. Затем я выстроила другую схему: если мне не удается самостоятельно справиться с задачей за полчаса, я смотрю решение. Такие задачи я заносила в специальный список, и еще раз проходилась по ним по утрам. Эта практика оказалась очень благотворной для моего продвижения в разработке.
Держаться того, что работает. Когда-то я постоянно перескакивала между разными вебсайтами, посвященными программированию. Толку от этого было мало — я решала одни и те же задачи в разных местах. В итоге ничему новому я не училась. Лучше найти одну платформу, которая вам по душе, и оставаться на ней. Для тех, кто готовится к собеседованиям, Leetcode — подходящий выбор.
Ошибки, которые я допускала в процессе обучения
Не застревать на одной задаче. Одна из самых серьезных моих ошибок — склонность уделять слишком много времени одной задаче. Если за 15–20 минут никак не удалось продвинуться, загляните в подсказки. Если по истечению часа вы все еще в тупике, ищите решение в обсуждениях.
Рассматривать разные подходы. Раньше я все силы бросала на то, чтобы прорешать как можно больше задач. Однако на собеседовании могут расспрашивать о разных методах — допустим, с применением грубой силы или метода оптимальных решений. Соответственно, при решении задачи следует делать обзор всех возможных вариантов.
Не пренебрегать состязаниями. Когда у вас появится хорошее понимание выбранного языка программирования, начинайте участвовать в состязаниях, которые проводятся раз в неделю или две. Эта привычка помогает анализировать, как меняется ваш уровень. Ну и держите в уме, что копировать чужие решения ради рейтинга не стоит. Рейтинг-то это повысит, но реальных знаний не даст.
Избегать прорешенивания однообразных задач. Это распространенная ошибка. Поначалу я десятками щелкала простые задачки как орешки. Простые задачи помогают прояснить основы, но спешка здесь не нужна. Если простые задачи уже идут легко, переходите на средний уровень сложности, а если успешно справляетесь со сложными — берите следующую тему. Помните, что качество важнее количества.
Полезные инструменты, которые ускорили мой прогресс
Leetcode Big Omega: Это расширение для Google Chrome, которое выводит тэги компаний. Когда я готовилась к собеседованию в определенной компании, то могла отбирать задачи, которые там используются. Это расширение существенно облегчило для меня подготовку.
Таймер для экрана. Я стала запускать на телефоне таймер, особенно для тех приложений, в которых просиживаю подолгу. Таймер принудительно закрывал приложение, когда дневной лимит оказывался исчерпан. Благодаря этому я экономила массу времени.
Таймер для Leetcode. С помощью этого расширения для Chrome я отслеживала, сколько времени трачу на ту или иную задачу. Это давало возможность задать временной лимит для простых, средний и сложных заданий — расширение оповещало меня, когда этот лимит превышался. Так время использовалось оптимальным образом.
Заключение
То, что я решила тысячу задач на Leetcode, само по себе не имеет значения — важно то, научилась ли я их решать в кратчайшие сроки. На этапе собеседования, посвященном написанию кода, на решение трех задач дают лишь полтора часа. Постарайтесь избегать моих ошибок и неустанно исследуйте LeetCode Discuss — там можно найти много ценных сведений.