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

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



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



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

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


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

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

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

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

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



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

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

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


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

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

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

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

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


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



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

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



Заключение


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

Комментарии (11)


  1. nemajo
    29.03.2024 15:20
    +13

    ...и не поехать кукухой?


  1. Politura
    29.03.2024 15:20
    +7

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


    1. dyadyaSerezha
      29.03.2024 15:20

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


  1. Sau
    29.03.2024 15:20
    +2

    Решать в среднем по 3-4 задачи в день. Решать лучше всего простые, так легче достигнуть KPI.


  1. Scott_Leopold
    29.03.2024 15:20

    Ещё бы аффтар (-ка?) дала разбивку задач по сложности... Если решать только лёгкие, то можно и за месяц тыщу наколотить


    1. dizel3d
      29.03.2024 15:20
      +2

      См. скриншот в статье. Простые, средние, тяжелые: 227, 488, 290.


  1. plFlok
    29.03.2024 15:20
    +2

    Если по истечению часа вы все еще в тупике, ищите решение в обсуждениях.

    Нуууу, это ж не решение. Хотя если цель - набить зелёных квадратиков, то kpi достингут


    1. WebPeople
      29.03.2024 15:20
      +7

      Вполне себе отличное решение. От того, что потратишь 2-3 дня на решение сложной задачки умнее не станешь. Знаний не прибавится. Лишь мотивацию сожжешь, когда задачка не решается. И что с ней делать, если не получается решение найти? Посчитать себя тупым и бросить все? Пропустить и идти дальше? (оставив пробел)

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


  1. Georrg
    29.03.2024 15:20
    +2

    Мне скучно становится через 20 задач. Вообще не понимаю зачем на это тратить столько времени)) Но каждому свое. Если потом профессионально писать алгоритмы - то что доктор прописал


  1. Cleankz
    29.03.2024 15:20

    Здравствуйте! Подскажите, пожалуйста, название таймеров литкода и экрана


  1. CentariumV
    29.03.2024 15:20
    +1

    Вот ее профиль на LeetCode
    https://leetcode.com/_noname/
    В гитхабе в открытые репы у нее все студенческого уровня, всякие "Internship-Project" на Js, Css. На вид ей лет где-то 20+. Я что хочу сказать - у меня в знакомых есть люди с математическим образованием, с очень хорошей подготовкой. Кто - то даже работает математиком в Microsoft. Кто - то - программистом в Apple. Тоже решают время от времени задачи на Leetcode и они и близко к таким результатам не подошли.
    В свое время читал все 4 тома Кнута вместе с комбинаторикой, разбирался в его MIXX, пробовал решать задачи - научные проблемы к разделам.
    Кстати некоторые из этих научных проблем потом находил на leetcode на уровне hard. Что говорит о том, что их брут - форсом чрезвычайно тяжело решить - тут нужен высокий уровень математической подготовки, надо знать подходы к решению. Величайшие математики вроде Эйлера, Дийкстры, Гаусса, Евклида их годами решали. Не такие известные, как задача коммивояжера, вроде задач на разрезание многоугольника или задачи 36 офицеров Эйлера.
    А тут - 1000 задач за год, в иные дни по 21 submission. Конечно, submission это может быть и не одно решение одной задачи, но методом амортизации в разрезе всего года можно аппроксимированно предположить, что 3-4 задачи стабильно решались. Это человек без работы и личной жизни одни задачки что ли решает? Или hard за 10 мин решает?
    Посмотрел последние 10 задач - отточенные все, элегантные решения, которые к тому же в оснновном бьют 99% всех остальных по памяти и run time.
    Контент менеджер. Мне кажется, ей бы лучше руководство каким - нибудь отделом Google подошло. Или руководство Google.
    Да, конечно, в литкоде можно и решение задачек глянуть в discussion и гуглом пользоваться и те же нейросети chatGPT использовать для решения и для самопиара. Что кстати важно для контент - менеджера. Но она же говорит, что сама решала.
    Как говорил Эйнштейн - "Я не такой уж умный, я просто много решал задач. И долго не сдавался при их решении"