«Я решил более 350 задач на LeetCode, и решил поделиться выводами.
Вот распределение тем («топиков»), по которым я успешно решил задачи («проблемы», как их называют на LeetCode), и количество вопросов в каждом топике:
Главное, чему я научился, изучая структуры данных и алгоритмы (DSA) на LeetCode — это быть последовательным.
Тогда изучение получается легким. Постепенно, плавно, в собственном темпе, начинаешь постигать общие закономерности.
Еще одна важная вещь, которую я понял — по возможности, свести к минимуму решение задач, с которыми тебе удобно работать, или ты давно уже знаешь, как их решать.
Потому что решение легких/известных вам задач не дает результата в долгосрочной перспективе.
Помимо того что я теперь поднял свой уровень в DSA, я понял, что изучающему DSA нужно много мотивации для решения новых или усложненных задач, которые часто задаются на онлайн-собеседованиях, особенно в крупных компаниях.
Далее мои выводы и советы — еще раз и подробно.
- Не бойтесь сложных задач
Я сосредоточился на таких темах, как динамическое программирование, двоичный поиск, графы, деревья и очереди приоритетов, поскольку эти темы очень часто спрашивают на собеседованиях, и они реально требуют много времени и терпения.
- Индивидуальность
Важно не сравнивать себя, свой путь — с кем-то другим, потому что все мы разные люди с разным опытом, с разными кривыми обучения. Осознать индивидуальную кривую обучения и работать по ней — одна из лучших вещей, которые мы можем сделать для себя.
- Терпение
У меня ушло 10 месяцев на решение 350 задач. Параллельно я работал. Возможно, кому-то понадобится времени в два раза меньше, это нормально. Это мой собственный путь, и я не буду портить себе настроение, думая о том, что делают другие — а я по настоящему хорошо делаю то что я делаю.
- Внимательность
Постарайтесь тратить хотя бы 30 минут на решение одной задачи. Лично старался тратить как минимум полчаса на решение средней задачи (медиум-уровня). Если что-то не получалось, я старался еще немного, а если ничего не получалось, я начинал искать подсказки. Иногда там могла быть особая техника, алгоритм, или концепция, которую нужно было знать для решения конкретной задачи. Старайтесь сделать все возможное за 30 минут, а после этого не отчаивайтесь, ищите подсказки.
- Мотивация
Должна быть большая мотивация. Возможно, для кого-то это прозвучит странно, но мотивация реально помогает двигаться вперед. Потому что может наступить момент, когда вы, как вам кажется, не можете идти дальше, и поверьте, со мной тоже такое случалось. Тогда лишь большое желание быть лучшим помогает преодолевать препятствия. Вы сейчас можете находиться в зоне комфорта, с приличной зарплатой. Но если у вас сохранилось есть желание быть лучшим, вы должны активировать его, независимо от того, насколько хорошим или плохим был ваш день.
- Дисциплина
Будьте дисциплинированны. Перед поездкой в офис я решал задачи по алгоритмам, это стало частью моей жизни, как еда, сон, питье и любая другая рутина. Поначалу это может показаться сложным — но постепенно становится естественным.
- Задачи уровня Medium
Задачи среднего уровня сложности идеально подходят для решения. Они как бы между — не слишком легкие и не слишком сложные. Поэтому им следует уделять наибольшее внимание. Средние задачи идеально сочетают в себе: продумывание алгоритма который нужно применить в задаче, и нюансы его применения. Иногда сложно применить структуру данных или алгоритм в задаче. Старайтесь решать больше средних задач, и по возможности более высокого уровня сложности, так как именно средние и сложные задачи часто задают на собеседованиях в крупных компаниях.
- Не только структуры данных и алгоритмы
Решайте задачи не только из списков задач по алгоритмам. Вы можете найти в интернете много готовых решений по DSA на LeetCode и подобных платформах, собранных бывшими сотрудниками FAANG-компаний. Не советую ограничивать свой рост этими задачами только из этих списков.
- Прокрастинация
Боритесь с демотивацией и ощущением «уже достаточно». На своем пути не раз сталкивался с демотивацией и хотел остановиться на полпути.
Демотивация — нормальное человеческое чувство, она может проявляться по-разному: неспособность решить задачу, неспособность понять решение, неспособность даже посмотреть уже решённую кем-то задачу. Это нормально, человек может демотивироваться, замечая что сталкивается с подобными трудностями, это часть пути. Я столкнулся со всем этим и понимаю, что это часть процесса обучения, и я стараюсь проверять уже пройденные задачи. Я просматриваю свои задачи, в том числе свои заметки по этим задачам, там я пишу выводы по этой задаче, и проблемы.
- Конкурсы
Leetcode предлагает еженедельные и двухнедельные конкурсы, состоящие из четырех задач. Эти задачи включают в себя: несколько структур данных + алгоритмы в этих задачах, чтобы укреплять понимание. Конкурсы содержат задачи всех уровней сложности — легкие, средние и трудные.
- Периодические проверки
Важно иногда проверять уже решенные задачи. Вы можете попасть в поток все новых и новых задач, изучения новых структур данных, и в этом процессе забыть важные концепции.
P.S. ЧАСТО СПРАШИВАЮТ:
В Гугле и Яндексе часто спрашивают следующее:
Чему учит leetcode?
Мыслить «алгоритмически». Решенные задачи вряд ли 1:1 применимы в реальном мире, но само по себе умение их решать будет оценено по достоинству.
Можно ли научиться программированию с помощью LeetCode?
Можно, но скорее это платформа для совершенствования уже имеющихся навыков.
Чем полезен LeetCode?
Польза, если кратко, в существенном улучшении умения программировать с использованием продвинутых алгоритмов.
Какие языки есть на LeetCode?
Поддерживаются 8 языков, наиболее распространенных и наиболее востребованных в крупных IT-компаниях. Это: C++, Java, Python 3, C, C#, JavaScript, TypeScript, и Go.
На каком языке решать литкод?
Зависит от лично ваших целей трудоустройства; а статистически самый популярный на платформе Python.
Есть ли на LeetCode бесплатные задачи?
Да, есть. Бесплатные задачи ориентированы на «новичков и людей с ограниченным бюджетом».
Сколько бесплатных вопросов на LeetCode?
Тысячи.
Можно ли использовать LeetCode без премиум-подписки?
Разумеется. На платформе огромное количество хороших задач, без необходимости оформлять премиум-подписку.
Хорош ли бесплатный литкод?
Конечно. Чтобы попрактиковаться.
Стоит ли покупать LeetCode Premium?
Решать вам. В целом — да, если стоИт цель подготовиться к собеседованию в ведущих компаниях вроде Яндекса или Авито.
Могут ли быть проблемы с оплатой?
Да. Но они решаемы. Например здесь гайд по их решению.
Есть ли существенная разница по уровню подготовки между бесплатным LeetCode и LeetCode Premium?
Вопросы в премиум-варианте «более сложные и уникальные», в смысле более специфические для американских FAANG-компаний типа Google, Amazon, Facebook и Microsoft. Релевантно ли это для российских IT-компаний на 100%, вопрос дискуссионный.
Премиум, как говорят владельцы платформы, отличается тем, что там «есть доступ к дополнительным задачам, подробным решениям, специфичному для компании контенту, и расширенным инструментам подготовки, для серьезных кандидатов на собеседование».
Какая подписка лучше?
Существует один вариант премиум-подписки.
Сколько стоит премиум-подписка на LeetCode?
$35 в месяц.
Почему LeetCode платный?
Философский вопрос. Скорее всего потому, что реально хорошие вещи почти никогда не бывают бесплатными.
Есть ли готовые решения LeetCode Premium?
Хороший вопрос!
Можно ли перевести LeetCode на русский?
Можно. Проще всего поставить в Хром расширение LeetCode to Russian.
Сколько всего задач в LeetCode?
Около 3500.
Чем LeetCode отличается от Codewars?
CodeWars ориентирован на JavaScript-задачи, и там маловато задач по алгоритмам. LeetCode изначально был ориентирован на изучение алгоритмов. Но на CodeWars в два раза больше задач. Здесь подробное сравнение.
Что лучше, HackerRank или LeetCode?
HackerRank поддерживает больше языков, там более функциональный редактор кода, более широкий спектр тем, включая ИИ, машинное обучение и т.п. LeetCode как бы «более глубокий». Подписка HackerRank дешевле.
Сколько часов в день нужно заниматься на leetcode?
Начинающим советуют заниматься от часа в день, и до 2-4 часов. Это если стоит вопрос о сколько-нибудь серьезной подготовке к собеседованию в солидной IT-компании.
Сколько вопросов LeetCode достаточно?
Индивидуально, но в целом для новичков должно быть достаточно примерно 100-150 задач. И 300-500+ задач, если у вас стоят серьезные цели. Больше — только для рекордсменов, реальная польза сомнительна.
Стоит ли стремиться решить абсолютно все задачи с Leetcode?
Если получится, пробуйте. Но лучше потратить это время на прокачку например софт-скиллов.
Софт-скиллы в QA: полный гайд
Чему меня научили менторы в Google: софт-скиллы
Сколько времени нужно для подготовки на LeetCode?
Примерно года должно быть достаточно чтобы «освоить литкод». Здесь хороший гайд.
Какой рейтинг на leetcode считается хорошим?
Смотря что считать «хорошим», это зависит от компании. Подавляющее большинство литкодовцев обладает рейтингом примерно 1500 решенных задач (то есть решили около половины всех «проблем»).
Например 91% решенных вопросов дает Бадж Хранителя. Extremely impressive )
«Почему leetcode так важен?»
Потому что исключительно популярен в FAANG.
Кто создал LeetCode?
Основал в Шанхае малайзиец китайского происхождения Уинстон Тан. Ничего особенного: работал в Google, Amazon, Intel. Призывает джунов to Embrace Change, Adapt and Innovate, и так далее, и так далее.