Как стать автором
Обновить

Пройти LeetCode за год: экскурсия по сайту и roadmap [обновлено 30.11.2023]

Уровень сложности Простой
Время на прочтение 23 мин
Количество просмотров 86K
Changelog
  • 30.11.2023

    • [LC] Добавлена поддержка PostgreSQL

    • [LC] Добавлены 15 задач для Pandas и два соответствующих плана. Задачи на SQL теперь также позволяют выбрать Pandas для решения

    • [Статья] Информация актуализирована

  • 24.06.2023

    • [Статья] Подтверждена возможность прохождения старых планов по прямым ссылкам (upd: возможность закрыта)

  • 15.06.2023

    • [LC] Полностью переделан раздел Study Plan, убраны "продвигаемые" списки (слиты с новыми планами)

    • [Статья] Переписаны соответствующие разделы и Roadmap. Добавлен чит с прохождением старых планов

    • [Статья] Дополнена информация о премиум-части. Прочая информация актуализирована

  • 12.04.2023

    • [LC] Добавлен раздел JavaScript с 20 (уже под 50 70) задачами на JS/TS.

    • [LC] Более 30 задач на SQL стали non-premium

    • [LC] Добавлена explore карточка Cheatsheets

    • [fix] [Статья] Дополнено распределение сложности в турнирных вопросах

    • [Статья] Добавлен этот changelog, для возвращающихся к материалу за обновлениями :)

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

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

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

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

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

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

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

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

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

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

  • Знание алгоритмов и структур данных – 7/10

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

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

  • Понимание применимости алгоритмов на практике – 10/10

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

    • Один из примеров – тема бинарного поиска. Сначала сайт знакомит с базовым представлением – вот отсортированный массив, вот target, вперёд. Потом вам предлагают сделать то же с матрицей, с повёрнутым массивом, и с прочими усложнёнными вариациями. А потом из входных данных пропадает и массив для ожидаемого поиска, и target, в виде простого значения из него. Теперь вы сами формируете и последовательность, и условие поиска, отталкиваясь от прочих входных данных, для задачи, которая, на первый взгляд, никак к изучаемой теме не относилась. Такие моменты, когда вы открываете новые подходы, неважно какого уровня сложности, всегда приятные.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Задачи составляют основу сайта и могут быть доступны из разных разделов. На сегодняшний день доступно 2370 [+585] задач, в их числе 77 [+160] для SQL и Pandas (+15 отдельных задач на азы Pandas), 37 [+30] для JS/TS и по 5 на shell и concurrency [+3]. Для алгоритмических задач, для решения предлагается 18 языков. Для SQL доступен выбор между MySQL, MS SQL Server, Oracle, PostgreSQL и даже упомянутым ранее Pandas. Все задачи условно разделены на три уровня сложности, с приблизительным общим распределением 1easy/2medium/1hard.

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

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

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

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

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

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

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

Study plan

Планы – это структурированные наборы задач по выбранной теме. 04.05.2023, на втором году существования, раздел был переделан. Современные планы куда ближе к обычным спискам. На сегодняшний день доступно 10 тематических, 4 FAANG prep, и 4 top/most плана. Внутри каждого плана вы также увидите дополнительное разделение на темы, благодаря чему несколько задач подряд вы будете закреплять определённое знание, после чего перейдёте к более глубокому тегу.

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

Если у вас уже выполнено некоторое количество задач плана, вам не нужно отправлять решения заново, достаточно лишь нажать на кнопку "Mark As Solved", всплывающую при наведении на серую иконку решённой задачи. Единой кнопки "отметить все выполненные ранее задачи решёнными" нет. Автоматический учёт работает только с использованием новой версии редактора, и только если переход был непосредственно из плана (с url параметрами envType и envId).

С платно-бесплатной частью в новых планах сложно. Для non-premium пользователей может быть закрыт весь план, может быть закрыт тег внутри плана, либо вовсе конкретный вопрос. Причём в закрытом теге могут быть и открытые вопросы, но увидеть это можно только после [открытия тега]. Полностью же доступны к бесплатному прохождению 4 плана группы Cracking Coding Interview (Top Interview, Top Liked, LC75, SQL) и отдельный Introduction to Pandas. Планы Programming Skills, Dynamic Programming, Graph Theory, Binary Search, JS30 и Pandas30 открыты на 80%, что не позволит вам завершить их, но даст необходимые знания по теме. Полностью закрытые планы – Premium Algo, Advanced SQL и DP Grandmaster.
Списки (именно так) FAANG prep закрыты практически полностью, но здесь невелика потеря.

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

Cheat (закрыт. Описание сохранено для истории)

По прямым ссылкам некоторое время можно было запускать старые планы:

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

Всего к решению предлагается до 390 задач из полностью открытых планов и 200 из почти полностью открытых. [+53 задачи из открытых планов и 3 премиум-плана на 197 задач].

Как было раньше (и почему было лучше)

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

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

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

В новом виде участники получают меньше поощрений (13 [+11] бейджей в старом виде против 5 [+9] новых), а переходы между разными уровнями сложности потеряны (не считая продвинутых вариантов планов DP, SQL и Algo, и то, последний – больше список, нежели план). Если участник столкнётся со сложностями при решении новых планов, он просто оставит их прохождение и вернётся к ним неизвестно когда.

Разница prem/non-prem куда меньше цепляла взгляд, и до определённого порога была вовсе не видна.

Общее число задач в тематических планах было больше, и значимость раздела была выше (485 [+565] vs ≈300 [+245]).

Но не будем слишком уж поноси́ть это изменение. Переработан интерфейс, и, хоть и вкусовщина, он стал приятнее. В целом правила прохождения стали лояльнее к участникам, хоть и ценой мотивации и последовательности. Дробление по тегам внутри каждого плана теперь более явное, и помогает лучше закрепить конкретное знание, акцентируя внимание на теге.
Но, что главное, – у этой версии планов куда выше потенциал развития, а значит, спустя некоторое время эта версия сможет превзойти своего предшественника (upd: хотя спустя полгода этот абзац кажется не слишком пророческим).

Для истории: как это выглядело (списки вопросов в старых планах)
Programming Skills

LeetCode 75

Data Structure

Binary Search

Algorithm

Dynamic Programming

Graph Theory

SQL

Планы – отличный функционал именно за счёт структуры. Хоть этот раздел и пострадал при обновлении, но он всё ещё остаётся основным разделом сайта для закрепления тем АиСД. Но, разумеется, не единственным.

Explore

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

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

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

Темы разделены на главы, состоят из страниц и задач, страницы содержат текст, видео, слайды и тесты, тут ничего необычного. Темы раздела собеседований бросаются из крайности в крайность – где-то вода, где-то голые списки задач. А вот раздел Learn весьма полезен. Суммарно в последнем вам предложат до 190 задач на 320 страницах, и 142 задачи с 85 страницами текста в разделе Interview. Ещё 30 страниц можно, по желанию, найти в первых главах закрытых тем.

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

Lists

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

До обновления раздела Study Plan, LeetCode также предлагал собственные "продвигаемые" списки, которые теперь перекочевали в планы, а от старых списков осталась лишь пользовательская часть. В разделе обсуждений вы можете найти подборки публичных списков по разным тегам, для личного прохождения (пример). Чтобы отслеживать прогресс по публичному списку его необходимо клонировать.

Для истории: старые продвигаемые списки

Assessment

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

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

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

Пример оценки навыков

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

Contest

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

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

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

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

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

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

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

Будьте осторожны с предварительной регистрацией. Отменить регистрацию на турнир можно, но куда надёжнее регистрироваться перед самым стартом.

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

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

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

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

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

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

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

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

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

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

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

Пройденные ежедневные задачи без пропусков, допуская закрытие задним числом, образуют "огненный" стрик пользователя, отображающийся в шапке страницы. Схожие с ним счётчики в профиле – total active days и max streak. Они учитывают любые решения, не только ежедневные задачи, и на них не действуют закрытия задним числом. В конце календарного года выдаётся отдельный годовой бейдж участникам с 300+ total active days в данном году. Бейджик свежий, выдаётся только второй раз. Возможно, к следующему вручению награду к нему расширят, например временным премиумом или монетами, но это лишь догадки, хотя со стороны администрации это был бы отличный стимул. В уходящем году значок несколько расширили, добавив утешительные вариации – за 50 и 100 дней.

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

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

  • Одноразовые активности

    • заполнение профиля и подключение ссылок на сторонние ресурсы – 60

    • первое участие в турнире – 200

    • первое прохождение тестового интервью (assessment) – 100

    • прохождение explore карточки – 25 за каждую = 225 с полностью бесплатных

    • первая публикация в обсуждениях – 50

    • Итого: 635

  • Регулярные

    • посещение сайта – 1/день

    • 30-дневный стрик посещений – 30/30дней

    • выполнение ежедневного задания – 10/день

    • участие в турнире – 5/нед +5/2нед

    • участие в еженедельном и двухнедельном турнире подряд – 35/2нед

    • призовая кнопка на странице турниров – 10/нед?

      • в этом пункте я не до конца уверен. Примерно раз в неделю на общей странице турниров появляется "секретная" кнопка, при нажатии даёт 10 монет и на какое-то время пропадает. Но я не знаю, по какому условию она отображается, и появляется ли она у тех, кто не участвует в турнирах, или может она связана с формой отзыва о турнире, которую достаточно один раз заполнить. По логу монет находил получение с промежутком и в 2 дня. Непонятно. Поясните в комментариях, если знаете.

    • выполнение 25 ежедневных заданий календарного месяца – 25/мес

    • выполнение всех ежедневных заданий календарного месяца без использования "билета" – 50/мес

    • [выполнение еженедельного премиум-задания – 35/нед]

    • Итого: до 600/мес

  • Частные

    • принятое добавление вопроса – 1000

    • принятое добавление теста к вопросу – 100

    • принятое сообщение о нарушении в турнире – 100

    • принятое сообщение об ошибке в турнирном вопросе/тесте – 100

    • призовое место в турнире – от 5000 до 50, за места от 1 до 200

    • индивидуальное награждение администрацией сообщения или комментария в обсуждениях

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

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

При первом получении подписки откроется к прохождению [15] тем в учебнике и ещё 13 можно будет [допройти], что дополнительно даст компенсацию в 700 монет для следующего премиума + 175 (или 210, в зависимости от дня начала премиума) за еженедельные задания. Также станут доступны [3] новых плана в соответствующем разделе, и откроются для [завершения] 6 тематических планов и [4] FAANG prep списка. Ну и, конечно, откроются общие премиум-вопросы, но их все спринтить за месяц, конечно, не стоит.

Стоит отдельно вынести вопрос "да просто купите премиум за $". Имхо, в этом нет смысла. Премиум открывает доступ как раз к тому контенту, который востребован после преодоления пороговых значений. Если нужны прочие преимущества, вроде отладчика, автодополнения, списков вопросов по компаниям – пожалуйста. Но закрытый контент при последовательном прохождении вам не понадобится, пока вы до него не дойдёте. К тому же, процесс накопления на премиум это очередная игрофикация и стимул к участию. Как в обычных играх – ввести чит на годмод совсем не так интересно, как пройти игру самому.

Roadmap

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

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

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

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

    • заведите страницу в нотионе, эксельку или просто .txt, начните отмечать, насколько легко вам даются те или иные темы.

  • 0-3 мес – переходите к разделу Learn учебника. Проходите соответствующие темам теги в LC75, а после карточки Binary Search и соответствующий ей отдельный план.

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

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

  • 4-5 мес – погрузитесь в углублённые темы – Graph Theory и Dynamic Programming. Здесь без сторонних материалов вы точно не обойдётесь.

  • 6-8 мес – закрывайте оставшиеся "списковые" планы (top interview, top liked), SQL, JS, по желанию, и explore-interview карточки.

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

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

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

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

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

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

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) себе на будущее, чтобы в следующий раз попробовать решить задачу самостоятельно. Расширенным вариантом будет оставлять комментарий ко всем решениям с собственной оценкой сложности, чтобы в дальнейшем сверять силы с прошлыми решениями.

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

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

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

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

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

Турниры

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

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

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

Прочее

На странице любой задачи нажмите в подсказку возле выбранного вами ЯП, ознакомьтесь, какие возможности доступны, помимо "из коробки". Иногда доступно даже больше, чем заявлено, как numpy для Python.

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

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

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

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

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

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


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

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

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

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

Теги:
Хабы:
+44
Комментарии 30
Комментарии Комментарии 30

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн