Пройти leetcode за год: экскурсия по сайту и roadmap

С наступающим, Хабр.

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

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

С сайтом несколько больно знакомиться, он отпугивает вездесущими приписками «premium», пользуясь славой ресурса для техсобесов продвигает функционал вроде списков компаний, где встречался вопрос n и симуляции интервью в компанию m, да и сам не особо стремится рассказать о себе, потому в нём зачастую и видно голый задачник с одной страницей «problems».

За всем этим теряется важный пункт –, а можно ли использовать сайт не для механического зазубривания популярных вопрос-ответов, а для изучения/закрепления алгоритмов и структур данных? Можно. Но подход к этому нужно формировать самостоятельно.

Тему «а кому вообще нужны алгоритмы» и её более радикальную вариацию мы затрагивать не будем, в этой священной войне уже немало копий сломано. Если вы открыли этот пост, как минимум вы допускаете, что кому-то да нужны.

На сайте присутствует платная подписка, которая закрывает часть контента. Не считая влияния на UI, это не критично, бесплатной части нам хватит, к тому же подписку можно получить и бесплатным способом, о чём мы также поговорим. Но, чтобы каждый раз не уточнять, какая часть подписочная, а какая общая — платный функционал я буду помечать [квадратными скобками].

39e193ba909fd95d10c992a4a644caa7.jpg

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

Но сначала несколько общих фраз.

Что вообще может дать литкод?

8a6ec809ba3712cb5be1df3310730bcf.jpg
  • Оценка входных данных, тесткейсов, сложности задачи и собственных сил — 7/10

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

    • Литкод также неплохо помогает бороться с крайностями «я всё/ничего не знаю», что никогда не бывает лишним. Досада от не найденного или явно плохого решения будет иногда возникать, но это неотъемлемая часть обучения. Зато к таким задачам приятно возвращаться снова, чувствуя разницу в силах.

  • Навык чтения и оценки кода — 5/10

    • «Код пишется один раз, а читается сотни». И данный ресурс не исключение. Вам, помимо собственных прошлых решений, так или иначе придётся часто обращаться к чужим решениям — для сверки решения, подсказки, поиска альтернативных подходов. А там вы обнаружите самый разнообразный код — на разных языках, в разных стилях, с устаревшими и только набирающими популярность подходами, и, конечно, от пользователей с разным уровнем подготовки. Вы привыкнете быстро оценивать качество как самого кода, так и подхода к решению, подмечать фрагменты, которые можно оптимизировать, и станете больше ценить читаемость в собственных решениях.

  • Английский и прочие смежные темы — 2/10

    • Всё что выше и ниже — не на великом и могучем, а на английском, ближе к «техническому». Неплохая подспудная практика. Что же касаемо прочих тем — тут стоит выделить задачи с тегами Database и Math. Первые — задачи на SQL, и left join’ами они не ограничиваются. Задачи из второго тега обычно отсылают к соответствующим знаниям, но куда интереснее задачи, в которых прямое решение, растягивающееся на 50+ строк, доказывается математически и сворачивается до пары-тройки выражений. Литкод также пытался и в другие темы, вроде shell’a, и хоть пока там всего 4 задачи, но намётки есть.

  • Знание стандартной библиотеки и синтаксических хитростей — 2/10

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

  • Преимущество при трудоустройстве — 1/10 и 10/10

    • Для первых этапов ссылка на литкод едва ли будет чем-то большим, чем незначительное конкурентное преимущество. Можно порассуждать, как литкод-профиль демонстрирует ваше стремление к развитию, непосредственно саму алгоритмическую подготовку и прочее… Но вы либо подходите по требованиям вакансии, либо нет, и обсуждаемая тема в этих требованиях встречается ой как редко.

    • Ну, а про алгоритмическую секцию комментарии излишни — решайте задачи, и все вопросы ваши, особенно с учётом того, что нередко их с литкода-то и берут (или же они впоследствии на него попадают). Обилие историй успеха по одноимённому запросу это только подтверждает.

    • Также литкод дополнительно ведёт статистику самых популярных вопросов на собеседованиях [и любимых вопросов в FAANG’е, и вы можете подготовиться даже к собеседованию в выбранную компанию].

e92b55bc97a694ca8d0a4e51c35e003d.jpg

Но пора бы уже перейти и к наполнению сайта.

В общем о задачах

Задачи составляют основу сайта и могут быть доступны из разных разделов. На сегодняшний день доступно 2000 [+530] задач, в их числе 45 [+175] для SQL и по 5 на shell и concurrency. Для алгоритмических задач, для решения предлагается 18 языков. Для SQL доступен выбор между MySQL, MS SQL Server и Oracle. Все задачи условно разделены на три уровня сложности, с приблизительным распределением 1easy/2medium/1hard.

Список постоянно растёт, в среднем на 1 задачу в день. Если более подробно — каждую неделю проводится турнир (о нём поговорим ниже) с 4 новыми задачами (1e/2m/1h), после окончания которого эти задачи включаются в общий список. Каждые две недели, помимо еженедельного, проводится biweekly турнир, по тому же механизму. [Дополнительно к этому в неделю добавляются 1–2 задачи.] Итого за 2 недели получается 12 [+2–4] новых задач.

3b763dec5bbbe50bf9c4e8bd978eaf92.jpg

Что есть на сайте

Problems / общий список

Тот самый раздел, который обычно и ассоциируется с сайтом. Давайте поскорее от него отойдём.

Из востребованного кликабельного: тут есть фильтры по тегам, статусу и сложности; сортировка по проценту принятия (количество принятых решений ÷ количество отправленных решений). Комбинацией этих фильтров можно подбирать задачи по уровню и интересу.

Если задача решается в прочих разделах, она помечается решённой и в общем списке. Но не наоборот.

Собственно, и всё. Двигаемся дальше.

Study plan

Относительно новый функционал. Добавился чуть более года назад, и с тех пор регулярно дополняется.

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

Каждый план разделён на 3 самостоятельных уровня*. Конечно, чем глубже уровень, тем на большее количество дней он рассчитан, и тем сложнее в нём задачи. Выполнение каждого уровня каждого плана подкрепляется отдельным бейджиком в профиле участника и открывает доступ к следующему уровню соответствующего плана. Последние уровни каждого плана — [].

После запуска уровня у вас будут открываться по 2–3 задачи в день, вне зависимости от того, решили ли вы задачи предыдущих дней. Если по истечении последнего дня уровня у вас выполнены все задачи — уровень засчитывается как пройденный, даже если вы решили все задачи в последний день (настоятельно не рекомендуется). Если же вы не закрыли n задач уровня — придётся запускать с первого дня. Самостоятельно прервать уровень нельзя*.

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

Несколько планов можно начать одновременно, но не уровни одного плана. Злоупотреблять этим я бы не советовал. Последовательное выполнение уровней планов отлично работает. Если желание спринтить уж слишком велико — 2 уровня одновременно допустимы, 3 — однозначный максимум, иначе вы просто накопите «хвосты» к последнему дню, и ничего хорошего из этого не выйдет.

При последовательном выполнении 13 бесплатных уровней со всех планов занимают 214 дней и предлагают до 485 задач, с распределением сложности 191e/283m/11h. [Для последних уровней — 242 дня и до 565 задач (34/312/219).]

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

4b564c0908d8a3f0cbccbc2c11e2f3af.jpg

Explore

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

Учебник разделён на две области — подготовка к тех.собеседованиям и изучение самих тем АиСД. На главной представлены по [8] тем из каждой области[[, первые из которых дополнительно платные сверх подписки, господи]]. Интересное же завёрнуто под «more» каждой области. Там мы найдём 8 полностью бесплатных тем и 13 с незначительными ограничениями. Рекомендую сразу прокликать их в избранное для быстрого доступа.

Открытые темы:

  • Learn

    • The LeetCode Beginner’s Guide — free

    • Arrays 101 — 30/31

    • Sorting — free

    • Linked List — 26/30

    • Binary Tree — 16/19

    • Recursion I — 20/21

    • Recursion II — 23/25

    • Machine Learning 101 — free

    • Binary Search — 28/30

    • N-ary Tree — 6/11

    • Binary Search Tree — 15/21

    • Trie — 11/14

    • Hash Table — 30/35

    • Array and String — free

    • Queue & Stack — 30/32

    • Decision Tree — free

  • Interview

    • Rock the Behavioral Interview — текст

    • Coding Interview Strategy — текст

    • Top Interview Questions (easy) — задачник

    • Top Interview Questions (medium) — задачник — 46/52

    • Top Interview Questions (hard) — задачник — 48/51

Темы разделены на главы, состоят из страниц и задач, страницы содержат текст, видео и тесты, тут ничего необычного. Темы раздела собеседований бросаются из крайности в крайность — где-то вода, где-то голые списки задач. А вот раздел Learn весьма полезен. Суммарно в разделе Learn вам предложат 190 задач (без учёта повторений) и 180 в Interview.

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

Lists

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

В разделе «problems» литкод предлагает 8 собственных списков, но это просто «топы»: 100 самых рейтинговых вопросов, 150 самых частых вопросов на интервью, топ вопросов в компанию n. Пройтись по ним перед собеседованием можно, но в них нет ни структуры, позволяющей использовать их для определения общего порядка решения, ни игрового стимула, даже отметки выполнения нет. К тому же, из 8 существующих официальных списков — 6 в квадратных скобках, один в полуквадратных, и только «Top 100 Liked Questions» может быть выполнен полностью.

Assessment

Раздел, на котором вы можете запустить симуляцию технического собеседования с 2, 3 или 4 вопросами, в любом варианте — по 30 минут на каждый вопрос. Вопросы случайно выбираются из списков — общего [и по конкретной компании]. При прохождении вопросов вы не видите их названия и номера, а также в тестах не отображается ожидаемый вывод.

По завершении симуляции (полное решение, истечение времени, досрочный выход) сайт предоставит оценку вашего решения данного набора задач. Решённые задачи также отметятся в общем списке задач.

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

Раздел с сомнительной полезностью, разве что для интереса раз в полгода можно и пройти.

9eed00e8b56c7d5449a85408624ad139.jpg

Contest

Каждое воскресенье в 5:30 утра по МСК (так уж получилось) и каждую вторую субботу в 17:30 (в дополнение к воскресному) начинается турнир с 4 задачами на полтора часа. Соотношение условной сложности привычное — 1e/2m/1h. Задачи всегда новые, ни готовых решений в интернете, ни вкладки обсуждения нет. Каждая задача оценивается в некоторое количество баллов, обычно ¾/5/6, ¾/4/6 или 3/5/5/6.

Есть особенности и со стороны проверки решения:

  • некоторые тесты при срабатывании скрывают, какой ответ ожидается или на каких входных данных произошло срабатывание, что может сильно помешать в отлове ошибки

  • так как вопросы новые, тесты для проверки могут быть дополнены после турнира, и если вы понимаете, что ваше, даже принятое, решение моментами захардкожено или пропускает какие-либо частные случаи, стоит по возможности его доработать. Иначе на дополненных тестах оно рискует не пройти, и ваши баллы и позиция будут пересчитаны. Данная ситуация совсем не редкая, как может показаться.

9595b6e42debba94c48cfdc4736190bf.jpg

Для формирования таблицы результатов используется сумма баллов за решённые задачи, вспомогательная сортировка происходит по времени затраченному на решения (по времени последнего правильного решения). Также ко времени добавляется по 5 «штрафных» минут за каждое отправленное неправильное решение (только для решённых задач). Не стоит недооценивать штрафное время, оно может существенно повлиять на вашу итоговую позицию.

В зависимости от занятого места меняется ваш общий турнирный рейтинг. Так как вопросы, даже при условном делении на e/m/h, из турнира в турнир будут отличаться по сложности, может сложиться так, что 4/4 решённых задач в лёгком турнире, где все выступили хорошо, дадут меньшую прибавку к рейтингу, чем 2/4 в сложном, ведь влияет ваша позиция относительно других участников. Прибавка к рейтингу конечно зависит и от ваших прошлых результатов. Подробнее о подсчёте рейтинга с формулами можно почитать здесь.

Для участия необходимо зарегистрироваться на странице конкретного турнира, по желанию заполнив анкету или нажав в «continue to register». Сделать это можно хоть за неделю до начала, хоть за минуту, а можно присоединиться и к уже начавшемуся турниру, но время окончания у вас будет общее со всеми.

Если вы зарегистрируетесь на турнир, но пропустите его (с учётом времени, скорее — проспите), ваш рейтинг всё равно снизится, потому будьте осторожны с предварительной регистрацией. Отменить регистрацию на турнир можно, но куда надёжнее регистрироваться перед самым стартом.

По завершению турнира вопросы отправляются в общий список, по ним открываются обсуждения, формируется предварительная таблица результатов турнира. Решённые вами на турнире вопросы в общем списке также отмечаются решёнными.

Примерно в пятницу (+/- 1 день) результаты прошлой недели пересчитываются и закрепляются, участникам обновляют рейтинг. До пятницы дорабатываются тесты к вопросам, выявляются нечестные участники, рассматриваются жалобы на нечестную игру от пользователей.

Участникам, с общим турнирным рейтингом входящим в 25% лучших, из числа всех участников с рейтингом 1600+, выдаётся бейджик «knight». На текущий момент это участники с рейтингом 1850+ (5.3% от всех участников). Для 5% «лучших из лучших» этот бейджик заменяется на «guardian», он на текущий момент требует 2175+ рейтинга (1.1% от общего). Если рейтинг понижается ниже требуемого, будь то неудачным выступлением, или общим повышением уровня, «guardian» обратно заменяется на «knight», а в случае последнего — сереет.

Периодически поднимается тема турнирных сезонов (1–2 в год), но пока рейтинг не привязан ко времени, и на ближайшее время подобные изменения не заявлялись.

Некоторые турниры спонсируются определёнными компаниями. Для участников, кроме призёров, это ничего не значит — турниры не меняют ни времени, ни правил. Внеплановых турниров, пока, тоже нет.

Вы можете попробовать свои силы и без влияния на рейтинг, в удобное для вас время — на странице турниров просто начинаете virtual contest по интересующему турниру и по тем же правилам проходите его. Хороший вариант опробовать, не пора ли вам принимать участие в них. Решённые в рамках виртуального участия вопросы также учитываются в общий список.

114edadba18e9a61689a6ad2ac7e56f3.jpg

Месячные и годовые соревнования

Игрофикация прохождения с подкреплением наградами в профиле.

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

Решившим все ежедневные задачи месяца выдаётся соответствующий бейджик, как в общий список наград пользователя, так и в отображении статистики года. Пропущенные дни можно закрыть задним числом за местную игровую валюту, но закрывать можно только пропуски текущего календарного года и только три раза в календарный месяц. Теоретически, если начать в марте, не пропуская ни дня, к концу года на излишки можно закрыть февраль в прошлом, но большого смысла в этом нет.

Пройденные ежедневные задачи без пропусков* образуют «стрик» пользователя — отображающийся огоньком в шапке страницы. За стрик 300+ дней в конце года выдаётся отдельный бейджик. Бейджик свежий, выдаётся только второй раз. Возможно к следующему вручению награду к нему расширят, например месячным премиумом или монетами, но это лишь догадки, хотя со стороны администрации это был бы отличный стимул. В уходящем году бейджик несколько расширили, добавив «утешительные» вариации — за 50 и 100 дней.

Монеты и подписка

Монеты — местная игровая валюта. За неё вы можете закрывать пропущенные дни в ежедневных соревнованиях — time travel ticket за 70 монет (60, так как 10 монет компенсируются выполнением пропущенного задания), обменивать на реальные вещи (футболки, блокноты, коврики для мыши), хотя сомневаюсь, что это работает в РФ, но самое интересное в этом списке — месячная подписка за 5000. Таким образом, почти все квадратные скобки выше раскрываются за активность на сайте. Накопить на неё быстро не выйдет, но в целом механизм бесплатного получения очень кстати. Итак, давайте подсчитаем, сколько и за что даётся монет:

Последнюю категорию учитывать не будем. По сути, вся активность сводится к простому выполнению ежедневных заданий без пропусков и участию в турнирах, что в сумме даст 600 монет в месяц. А это, с учётом стартового бонуса за одноразовые активности, позволит дойти до 5000 за 7.5 месяцев. Без турниров, которые начинающим могут быть ни к чему, или попросту не подходить по времени, чуть меньше — 440 (480?) монет, и соответствующие им 10 (9.2) месяцев до 5000.

Условие «без пропусков» довольно легко нарушить если не придавать ему значения, но оно даёт от 80 монет/мес, и позволяет не тратиться на билеты. Условие стоит соблюдать, тут никаких сложностей нет.

При первом получении подписки откроется к прохождению [15] тем в учебнике и ещё 14 можно будет [допройти], что дополнительно даст компенсацию в 700 монет для следующего премиума. Также станут доступны [9 из 11] уровней планов. Все 11 пройти вы просто не успеете — план Dynamic Programming включает сразу [три] уровня на 72 дня в сумме, что потребует, соответственно, трёх [месяцев] для прохождения. Ну и, конечно, премиум-вопросы, но их все спринтить за месяц тоже не стоит.

Roadmap

Итак, мы прошлись по тому, что в принципе есть на сайте. Теперь давайте поговорим, как правильнее подступиться к участию, чтобы из этого и толк был, и не бросить затею через неделю.

Первый вопрос — когда начать? Тут два правильных ответа: «сейчас» и «в начале месяца». Если же совпали оба — замечательно, приступайте. Начинать в первых числах месяца хорошо тем, что первые ежедневные вопросы не будут отпугивать повышенной сложностью, а игрофикация через месячное соревнование поможет удержать стартовый месяц. Да, простой набор пикселей в профиле без какой-либо реальной ценности, но это работает и поможет чуть ответственнее подойти к участию.

  • вводная неделя — начните с ежедневных заданий, посмотрите на другие разделы, решите несколько задач из списка сортировки по сложности-принятию. Запустите первый план. Общим началом будет Programming Skills или LeetCode 75. Заведите эксельку, страницу в нотионе или просто .txt, начните отмечать, насколько легко вам даются те или иные темы.

  • 0–4 мес — переходите к разделу Learn учебника, выполняйте первые уровни планов. Старайтесь подбирать планы под соответствующие темы учебника. Порядок планов, после PS и LC75, я бы предложил примерно следующий — Data Structure, Binary Search, Algorithm, Dynamic Programming, Graph Theory. Позицию для SQL оставлю за вами.

    • найдите дополнительные источники информации по теме — книги, видео, курсы, что вам больше по душе.

  • попробуйте свои силы в турнире, виртуальном или реальном. Две решённые задачи на этом этапе будут неплохим результатом, но если меньше, ничего страшного. Если остались довольны опытом, можете добавить регулярное участие.

  • 5–8 мес — начинайте вторые уровни планов. Порядок выбирайте сверяясь с собственными оценками сложности тем/планов. Потихоньку закрывайте списки из explore-interview карточек.

  • точка начала уверенных регулярных участий в турнирах, если не сделали этого ранее.

  • пройдитесь по всем разделам, посмотрите, что ещё осталось или добавилось за это время.

  • 9+ мес — накопите 5000 монет. Если вы проходили прошлые пункты стабильно, не злоупотребляя выполнением заданий прошлых дней за монеты, вы должны быть близки к этому значению.
    Если нет конкретной темы, на которой вы сами хотели бы остановиться, двигайтесь по комбинации фильтров с общей страницы проблем — «todo» + желаемый уровень сложности + сортировка по acceptance.

  • 1 премиум-месяц — пройдитесь по открывшимся разделам учебника. Они будут уже не так актуальны, но пригодятся для повторения и закрепления. Пройдите некоторые открывшиеся планы. В первый премиум месяц точно стоит пройти один уровень DP. Не пытайтесь закрыть сразу все открывшиеся уровни.

  • продолжайте поддерживающее участие. Копите на второй премиум, за счёт компенсации за учебник (700) это будет чуть быстрее первого.

  • (опционально) начните прохождение на новом ЯП, одновременно закрепляя полученные ранее знания и знания второго языка.

Roadmap рассчитан на минимальное участие — 3 новые задачи в день.

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

Максимальное же значение полностью зависит от вас, но под этим я не подразумеваю «берите как можно больше». Напротив, именно последовательное, вдумчивое прохождение должно быть вашей целью. И особенно учитывая то, что литкод для вас ни в коем случае не должен быть единственным ресурсом по специальности.

Давайте приблизительно отметим 8 задач в день, в качестве предельно допустимого максимума. После него вы просто перестанете вникать в суть задач, а на дистанции и вовсе бросите.

Сам литкод отмечает в вашем профиле собственным цветом дни с определённым количеством отправленных решений. Тут немного разные значения, т.к. я говорю именно о новых задачах, а литкод учитывает все отправленные решения, включая сабмиты решённых ранее заданий и отправленные, но отклонённые решения. Всего есть 6 цветов участия за день. Конкретные цифры соотношения уровня с цветом у всех индивидуальны и зависят от предыдущих показателей пользователя. Нет информации, от каких именно, но, судя по всему, от среднего количества решений в активные дни. Пользователи, которые склонны отправлять по 2–3 решения в день, а потом, в определённый, 50+ — попросту ломают цветовое распределение в своём профиле, и дни с обычным для них участием отмечаются первым (после нулевого участия), тёмно-зелёным уровнем (бледно-зелёным для светлой темы).

Почему я обращаю ваше внимание на ничего не значащую разницу в каких-то оттенках зелёного в профиле? Потому что в этом кроется ещё одно мягкое напоминание о всем известном, но очень часто игнорируемом правиле — небольшое, но стабильное участие куда лучше, чем редкое, но до изнеможения. И, конечно, это применимо не только к литкоду.

Итак, «плановая» часть литкода завершается за 8 месяцев, дальше накопление премиума и закрытие его части. А за сколько «проходятся» все задания литкода? Тут посчитать несложно, но отталкиваться, по понятным причинам, будем от общей части, а к закрытой отнесёмся как к endgame контенту:

  • 3 в день — с учётом добавляющихся заданий — 2.5 года. За это время вы можете собрать и пройти три [премиум-месяца], а за это время снова появятся новые задания, так что, округлим вверх — 3 года. За время подписки, при той же скорости вы пройдёте 40% дополнительных вопросов.

  • 4 в день — 1.75 года, [+2 мес] ≈ 2 года / [40%]

  • 5 в день — 1.25 года, [+1] ≈ 1.4 года / [25%]

  • 6 в день — 13.0 мес, [+1] ≈ 1.25 года / [30%]

  • 7 в день — 10.5 мес, [+1] ≈ 1 год / [35%]

Небольшие советы

Подсказки и готовые решения

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

Если сталкиваетесь с номерной задачей (e.g. «Path Sum III»), обратитесь к предшествующим. Если они не решены, стоит начать с них; если решены — пройдитесь глазами по решениям.

Если вы воспользовались чужим решением — обязательно построчно разберитесь, что там происходит. Если видите возможность оптимизировать отдельные конструкции или улучшить читаемость — улучшайте, в процессе вы и сами лучше разберётесь с решением.
Если решение слишком сложное — обратитесь к другому, возможно с альтернативным подходом. Не самое оптимальное, но понятное решение лучше, чем идеальная «магия».
Также оставьте в решении комментарий (в коде или через ui) себе на будущее, чтобы в следующий раз попробовать решить задачу самостоятельно. Расширенным вариантом будет оставлять комментарий ко всем решениям с собственной оценкой сложности, чтобы в дальнейшем сверять силы с прошлыми решениями.

a2294bc4cbd6b655ecd679da5e342c4c.jpg

Задания с опциональной сложностью

Обращайте внимание на follow-up приписки. Тесты пропускают решения не соответствующие им, и эта часть остаётся на ваше усмотрение, но стоит подумать о том, как можно улучшить ваше решение.

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

Некоторые задачи могут решаться в одну строку, с использованием пары встроенных функций языка. Если вы понимаете, что это не то, что от вас требуется — для себя, решите их так, как предполагается в рамках изучаемой темы.

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

Турниры

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

Если нет возможности/желания участвовать во всех турнирах, старайтесь принимать участие на неделях с двойными турнирами. Это даст достаточный турнирный прогресс и монеты, при участии всего раз в две недели.

На турнирах можно обращаться к общему списку задач — если возникли сложности, постарайтесь припомнить схожую задачу, её решение может помочь вам.

Прочее

На странице любой задачи нажмите в подсказку возле выбранного вами ЯП, ознакомьтесь, какие возможности доступны, помимо «из коробки».

Посмотрите аддоны по запросу «leetcode» для вашего браузера. Таймеры, скрытие [вопросов], счётчики сложности для листов, локальные заметки к задачам, дополнительные видео-решения, форматтеры, etc.

Иногда заглядывайте во вкладку обсуждений официального профиля LeetCode. Там публикуются обновления, новые планы и карточки учебника. Они некоторое время отображаются на главной странице, но в профиле следить за единым списком удобнее.

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

Не участвуйте с телефона, особенно в турнирах. Очевидные неудобства озвучивать не буду, но отмечу, что можно поймать TLE на тех решениях, что отлично проходят на ПК.

При вольном выборе задач не пренебрегайте лёгким уровнем сложности. Нередко вижу подобных пользователей, но не понимаю подход. Если вы планируете долгосрочное участие, вы так или иначе столкнётесь с этими задачами. Так зачем в начале с раздражением ломать голову над сложным уровнем, чтобы потом зевая решать лёгкий? Двигайтесь по плану, это и проще, и продуктивнее.

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

За сим всё. Статья описательная, но это описание должно хоть где-то быть.

Как обычно — дополнения, уточнения, раскрытие тем приветствуются.

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

445d86d4ed143d78cfe0072e59a5d367.jpg

Увидимся в следующем году!

© Habrahabr.ru