Как выбрать язык программирования на leetcode
Перейти к содержимому

Как выбрать язык программирования на leetcode

  • автор:

Подготовка к LeetCode-интервью

Задачи на алгоритмы – одна из частей процесса технических интервью в крупных компаниях в РФ и заграницей. Сами алгоритмы и структуры данных лежат в основе Computer Science (информатики) и изучаются на первых курсах любого университета, где учат на программистов. Leetcode – сайт, где можно тренироваться решать такие задачи.

Сразу к делу

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

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

Темы, которые мы разбираем

  • Массивы и объекты
    • Стек
    • Префиксные суммы
    • Хэшмеп
    • Слайдинг виндоу
    • Списки
    • Строки
    • Бинарные деревья
    • Дерево отрезков
    • Куча
    • Префиксное дерево
    • Дфс
    • Бфс
    • Юнион файнд
    • Бинарный поиск
    • Сортировки
    • Интервалы
    • Динамическое программирование
    • Бэктрекинг
    • Два указателя
    • Матрицы
    • Математика и геометрия
    • Работа с битами

    Это не исчерпывающий план, просто список задачек по темам, чтобы ничего не упустить. Решать все задачи по всем темам не обязательно. Я думаю, достаточно примерно 20 тем × 15 задач ≈ 300 задач всего.

    Ответы на вопросы

    Как проходят занятия

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

    На каком языке программирования пишут алгоритмы

    Лучше писать на том языке, на котором вам привычнее всего. Например, я пишу на джаваскрипте, потому что это мой основной язык на протяжении последних 10 лет. Самый популярный вариант это Python. В целом на языках с динамической типизацией писать проще. Но можно выбрать Java, C#, C++, Swift, Go или любой язык, который поддерживает LeetCode. На занятиях можем использовать любой язык, это не принципиально.

    Насколько хорошо надо программировать

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

    Сколько нужно решить задач, чтобы научиться

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

    Зачем нужно изучать алгоритмы, если у меня на работе нет таких задач

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

    Сколько это времени займет

    Зависит от вас, но это месяцы подготовки. Я бы сравнил это с университетским курсом. Студенты, которые учатся на программистов, просто в расписании имеют такой курс, который называется «Алгоритмы и структуры данных», в базовом формате он занимает 2 семестра, каждую неделю одна лекция и одна практика. Хорошо, что мы не студенты и можем заниматься более эффективно.

    Сколько стоит занятие

    Столько же, сколько мое обычное занятие по программированию: 3000 ₽ за 60 минут. Можно записаться на 90 минут.

    Что могу рассказать о себе

    Я работаю программистом (сейчас в компании Циан) и занимаюсь репетиторством более 10 лет. За последние 5 лет помог найти первую работу или устроиться на лучшее место более чем сотне человек. Учился в Санкт-Петербурге в ФМЛ 239 и на мат-мехе СПбГУ. С десятками людей успешно готовились к алгоритмическим интервью.

    Как со мной связаться

    • Телеграм: @maxsinyakov
    • WhatsApp по номеру +79522122526 или скайп maxsinyakov
    • В контакте: Максим Синяков
    • Почта: max@sinyakov.com

    Я решил 500 задач на LeetCode — и они действительно меня чему-то научили

    Компания Geekfactor cовместно с Getmentor.dev проводит программу подготовки к трудоустройству в зарубежные стартапы (бесплатно помогаем подготовиться к интервью и показываем резюме классным компаниям) — почитать о ней подробней и зарегистрироваться можно тут.

    Много кто знает, что такое Leetcode. Это своего рода решебник — задачи, которые дают на технических собеседованиях в крупных компаниях (в том числе и из FAANG) и их решения.

    Такие задания, заточенные на знание структур данных и алгоритмов, все чаще встречаются и на собеседованиях в небольших компаниях. Многим кандидатам это не нравится — они утверждают, что навыки «литкодинга» ничего не говорят о том, как человек справится с реальной работой. Согласен. Если вы не можете слёту решать задачи c LeetCode, это не значит, что вы плохой разработчик. Возможно, вам в реальной работе вообще никогда не понадобится, скажем, инвертировать бинарное дерево. Однако глупо отрицать, что на LeetCode можно изучить массу подходов и инструментов, которые окажутся полезными. В этой статье я расскажу о том, что вынес для себя из работы с платформой.

    1. Важно хорошо понимать структуры данных и алгоритмы

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

    Глупо отрицать: каждый программист должен отлично разбираться в структурах данных. Недавно читал историю, как небольшая модификация алгоритма позволила на 70 % сократить время загрузки GTA V. Да и на собственном опыте я знаю, как эффективная реализация приложения позволяет ему работать беспроблемно даже в условиях большой нагрузки.

    2. Всегда найдется кто-то, кто знает больше вас

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

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

    3. Пограничный случай может всё испортить

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

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

    4. Упорная работа ценнее, чем талант.

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

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

    Нелегко возвращаться в состояние джуна. Но надо

    Ещё одно свидетельство того, насколько важна практика, я получил, когда перешёл с задач по Python на задачи по Java. Хотя я использую Java ежедневно в работе, в контексте задач LeetCode она вовсе не кажется мне интуитивно понятной. Большинство задач на ней я не могу решить, пока не прогуглю детали реализации — как в старые добрые времена, когда я только начинал программировать. Но сейчас это меня не расстраивает и не демотивирует. Я знаю, что при условии достаточной практики буду разбираться в Java так же хорошо, как и в Python.

    5. Планирование — неотъемлемая часть разработки ПО

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

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

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

    Заключение

    Лично мне повезло: мне нравится LeetCode и я ничего не имею против дополнительной практики, даже когда не ищу работу. Однако я знаю многих, кто считает, что на нём нельзя научиться ничему, что пригодилось бы в реальной жизни. Надеюсь, своей статьей я смог хотя бы кого-нибудь убедить, что это не так. А если вам всё-таки приходится использовать платформу для подготовки к собеседованию, постарайтесь извлечь из неё что-нибудь полезное. На худой конец, на рынке много вакансий, где никто с задачами LeetCode вас мучить не будет.

    • «Не релокация, а эвакуация»: Переехал в Берлин, а потом устроился на удалёнку
    • Как студент строительного факультета подготовился к устройству на работу в Амазон
    • Staff Engineer в Booking.com и основатель Getmentor.dev о практиках найма в зарубежные компании

    Компания Geekfactor cовместно с Getmentor.dev проводит программу подготовки к трудоустройству в зарубежные стартапы (бесплатно помогаем подготовиться к интервью и показываем резюме классным компаниям) — почитать о ней подробней и зарегистрироваться можно тут.

    Тренажёр программирования LeetCode — что это и как его использовать

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

    Тренажёр LeetCode поддерживает множество языков программирования. Изучить их можно на онлайн-курсах. Например, «Java-разработчик» от Логомашины или «Java-разработчик с нуля» от Нетологии.

    LeetCode — что это?

    LeetCode — сайт, на котором размещены IT-задачи. Они постоянно обновляются, дополняются и актуализируются. В среде программистов LeetCode называют тренажёром для подготовки к техническим собеседованиям или другим событиям в профессиональной сфере, где нужно продемонстрировать свои умения для работы с кодом, написания, тестирования. Но помимо этого платформа считается хорошим инструментом для развития практических навыков, которые точно пригодятся в профессиональном будущем, если вы новичок.

    Скриншот из LeetCode

    В сервисе собрано более 2500 заданий, каждое из которые имеет свою классификацию — есть «Лёгкие», «Средние» или «Сложные». На официальном сайте написано, что тренажёр поддерживает 14 языков программирования, в которые входит и Java, а также он ориентирован на разработчиков. Для специалистов доступны инструменты, которые помогут тестировать, отлаживать и даже писать собственные проекты онлайн.

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

    Программирование — перспективная сфера для развития и продвижения по карьерной лестнице. Собрали лучшие курсы по программированию с сайта tutortop:

    • «Профессия Fullstack-разработчик на JavaScript» от Mathshub
    • «Бекенд-разработчик на Python» от SF Education
    • «Профессия: Python-разработчик с гарантией трудоустройства» от ProductStar
    • «Профессия Java-разработчик» от Skypro
    • «Веб-разработчик с трудоустройством» от Eduson Academy

    Сейчас мы дарим 10 000 ₽ на обучение в любой из школ-партнёров, представленных на сайте tutortop. При покупке через tutortop вы также получите курсы стоимостью 20 000 ₽ абсолютно бесплатно.

    Получите онлайн-курсы стоимостью 20 000 ₽ абсолютно бесплатно и промокод 10 000 ₽ на обучение.

    Нажимая на кнопку «Получить», я соглашаюсь на обработку моих персональных данных.

    Спасибо! Мы получили вашу заявку. Скоро с вами свяжемся.

    Как начать решать задачи на LeetCode?

    Для тех, кто первый раз пользуется сайтом, создатели сделали специальный раздел — Explore. В нём написано, как устроен сайт, что нужно сделать, чтобы начать работу и какую стратегию обучения лучше всего выбрать новичкам. Здесь всё на английском, из стран для выбора — США и Китай.

    Скриншот из LeetCode

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

    Вам нужно не только повышать уровень сложности, но и следить за числом принятия упражнений — Acceptance. Этот показатель отражает соотношение правильных решений ко всем отправленным. Чем он ниже, тем труднее будет справиться с задачей. Случается, что схожие задачи среднего уровня имеют совершенно разный acceptance — например, 72% и 87%.

    В этом же разделе есть курсы по разным темам — в них степень сложности увеличивается от задачи к задаче. Среди популярных тематик — SQL, Decision Tree, Sorting, View, Data coding. После регистрации и создания профиля можно изучить и войти в раздел Problems. Если пролистать чуть ниже, вы увидите кнопки All topics, Algorithms, Database, Best solutions ago и другие. Над ними — хэштеги с количеством задач по каждому из направлений. Не начинайте решать сразу весь раздел по порядку — воспользуйтесь фильтром, который станет помощником в выборе подходящей темы и сложности задач. Можете не переживать за конфиденциальность информации и личных данных — сервис обеспечивает её в полной мере.

    Скриншот из LeetCode

    Всегда ориентируйтесь на свои ощущения в плане сложности. Если понимаете, что времени уходит много, понижайте уровень. Чувствуете, что справляетесь быстро и у вас низкий процент принятия — смело повышайте сложность и пробуйте снова. Самое важное на первом этапе — это рассортировать задания в приложении по уровню и тематикам. Даже опытные разработчики сталкиваются с появлением пробелов в знаниях из-за отсутствия практики в этом направлении. И в случае с первичным изучением темы, и с восполнением пробелов лучше идти по порядку. На сайте есть текстовые материалы и статьи, которые подробно описывают тему — если не хватает объяснений, за помощью можно обратиться в поддержку или комьюнити.

    Скриншот из LeetCode

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

    Что нужно для продуктивной работы в LeetCode?

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

    1. Вы только знакомитесь с Литкод? Не заходите в раздел Contest. Здесь нужно решить 3 задачи за 1 час, причём всё проходит в формате соревнования, где в роли соперников выступают профессиональные программисты, которые участвуют в соревнованиях на Codeforces. Если начнёте с этого, можете резко подорвать веру в себя и свои силы.

    Скриншот из LeetCode

    2. Не сидите долго над одной задачей. В Литкод всё устроено так, что на решение одной таски не должно уходить по 40-60 минут. Стоит уделять тренажёру от 40 до 60 минут времени. В среднем на задачу уходит от 15 до 20 минут. В сложных случаях — 25.

    3. Когда понимаете, что долго не можете решить новую задачу, отправляйтесь в раздел Discuss. В нём люди обсуждают, какие проблемы возникают при выполнении, как можно решить топик на одном из языков программирования и почему не удаётся выполнять ежедневную норму. Особенно интересно читать комментарии, где можно поделиться сложной задачей или пожаловаться на ошибку в функционировании системы.

    Скриншот из LeetCode

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

    5. Используйте раздел «Подборки» — сюда можно добавить задания, которые не хочется потерять. Например, у вас не получается сделать задание. Вместо того, чтобы пропустить — сохраните. А когда появится время, вернитесь назад и попробуйте снова. Перед этим можете почитать инструкции и спросить совет у других программистов, а также нажать «share», чтобы поделиться оригиналом упражнения .

    Скриншот из LeetCode

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

    7. Выбираете между LeetCode и Codewars – не хватайтесь за всё и сразу. Никто не скажет, что из этого лучше, поэтому попробовать себя можно и там, и там. Но для конкретных задач выбрать одну программу. Например, в Codewars упражнения доступны более чем на 60 языках, но чаще всего используют Python. А уровней не 3, а целых 8. Можно сказать, что сервис имеет больший масштаб и популярность по всему миру.

    Скриншот из codewars

    8. Отслеживайте статистику в профиле и ведите календарь, в котором отмечаете дни с LeetCode. Это поможет понять, какие темы ещё нужно повторить, а что можно поставить на стоп. Из-за разнообразия упражнений и тематик многие сталкиваются с невозможностью отслеживать прогресс — в рамках одного направления часто происходит так, что на выполнение задач одного уровня сложности уходит разное количество времени. Это нормально, нужно привыкнуть к тому, что деление на уровни всё же условно.

    Скриншот из LeetCode

    9. Делайте маленькие шаги и придерживайтесь подходящей для себя стратегии. Работе с LeetCode в день достаточно уделять 50-60 минут. Вы сами можете выбрать, когда это делать — утром, в обед или вечером. Здесь всё зависит от загруженности. Главное — не перегружать себя и давать отдых нервной системе.

    Плюсы LeetCode для программистов

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

    Начните карьеру в программировании!

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

    Анна Уженкова

    Копирайтер. Увлекается литературой и любит разбираться в сложных вещах. В работе ценит сам процесс — тексты, это не просто тексты, а возможность на что-то повлиять. Среди тем, которые нравятся, — образование, психология, IT.

    From Zero to Hero: определите ваш уровень решения LeetCode задач от 1 до 5

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

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

    Уровень -1. Отброс. Решенных задач меньше 10

    Как определить

    Вы тупой (шутка!). 100% решаемых задач на этом уровне — Easy -. Да, в заголовке написано, что их 5, но я выделил этот уровень, потому что это был мой уровень вначале, и думаю уровень многих, кто в жизни не делал такие задачи.

    На этом уровне ты не можешь решить самую первую и популярную задачу на LeetCode — Two Sum любыми способами, брут форс, оптимально, неважно.

    Как пройти на следующий уровень

    Время, которое понадобится вам, чтобы перейти на следующий уровень около 2-5 часов без перерыва.

    Все достаточно просто, на этом уровне не нужно копаться в алгоритмах и структурах данных, надо привыкнуть к самой платформе, понять структуру задач, нужно прочитать внимательно описание задачи, посмотреть на примеры, которые нам дают (input) и что нужно получить (output), засамбитить задачку и понять, что есть такое понятие, как edge cases, когда ваше решение покрывает 3 примера, которые вам дали, но остальные 60 test cases почему-то валятся.

    После того как всё-таки покрыли все кейсы, посмотрите решение других ребят в разделе Solutions, которые сделали решение лучше, чем у вас, графики Runtime и Memory. Пока не надо брать в голову, что это за графики, все это изучите на следующем уровне.

    Вам нужно решить самые простые задачи на литкоде, они похожи на те, что вы решаете на работе 🙂 Где их найти? Всё очень просто. Идёте в Problems -> Easy -> Сортируете по Acceptance.

    Поиск самых легких задач на LeetCode

    Смотрите на первые 20 задач и решаете те, которые вам понравились, нужно решить около 10. Решать без разницы как, можно самым глупым брутфорсом, в своей любимой среде со всеми подсказками (но не надо, пожалуйста, использовать ChatGPT:), главное — пройти тесты и почувствовать наконец вкус победы на литкоде. Самый лучший путь к мотивации это маленькие победы, не забывайте об этом, поехали дальше!

    Уровень 1. Нуб. Решенных задач 10-50

    Как определить

    100% решаемых задач на этом уровне — Easy.

    Вы уже можете решить задачки с уровнем Acceptance 70-80% брут форсом в любимой среде разработки. Понимаете самые простые структуры данных — массивы, словари, связные списки, очереди, стек. Алгоритмы вы, конечно, используете, но не вникаете, что там внутри, просто набираете .sort()

    Как пройти на следующий уровень

    Время, которое понадобится вам, чтобы перейти на следующий уровень около 25-40 часов без перерыва.

    Чтобы пройти на следующий уровень, вам нужна БАЗА. Вы должны пострадать на этом уровне, зато дальше будет куда легче. Вам нужно взять ручку и тетрадку и пойти штудировать алгоритмы и структуры данных. Предлагаю начать с изучения ресурса neetcode.io, особенно его RoadMap, потому что сам им пользуюсь и считаю лучшим ресурсом, для тех, кто вкатывается в алгоритмы.

    Roadmap от Neetcode

    Выбираете первый раздел, что же там? Ах да, массивы. Если вы поймали себя на мысли, что да пф-ф, что там массивы, что я там не видел, то, пожалуйста, прошу, пойдите и почитайте несколько статей, проконспектируете, порисуете, вбейте в голову, как выглядит этот самый массив, никогда не будет лишним освежить свои знания. Также изучите сложность вставки, удаления и чтения.

    Да, здесь внимательно. Если вы до этого не изучили подробно, что такое Big O, идите, пожалуйста, почитаете, проконспектируете и посмотрите несколько видео как он рассчитывается, по времени и по памяти. Ок, теперь вы понимаете, что же это были за графики Runtime и Memory после решения задач.

    Теорию нужно закрепить практикой, открываете определённый раздел и решаете все Easy задачи (если хочется больше, можно перейти на вкладку Practice в NeetCode All). И дальше по списку, изучаете теорию представленных разделов, закрепляете практикой easy задачами. На этом этапе нет смысла спускаться дальше уровня Priotity Queue — Graphs — 1DP по роадмапу.

    Универсальный совет, как решать задачи, который я много раз слышал, и сам применяю на практике. Устанавливаете таймер в 45 минут, если вы за половину не решили, идёте и смотрите видео решения (алгоритм, без кода!) от NeetCode или других блогеров, пытаетесь реализовать алгоритм в коде. Если уж здесь не получилось, то внимательно переписываете решение и вникаете, что происходит в коде, дебажите и смотрите каждый шаг. Будет хорошо, если вы в комментариях к коду опишете каждый шаг, что происходит, чтобы точно удостовериться, что вы поняли решение.

    Уровень 2. Новичок. Решенных задач 50-100

    Как определить

    70% решаемых задач на этом уровне — Medium, другие 30% — Easy

    Вы большой молодец! По моим подсчётам (Solves problems -> beats) этот уровень достигают

    Наконец, вы можете без подглядки решить задачу типа TwoSum брут форсом, и даже возможно, оптимально. Вы уже понимаете такие структуры данных как деревья, графы, приоритетная очередь, решали задачи разными красивыми способами: two pointers, binary search, sliding window и т.д.

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

    Как пройти на следующий уровень

    Время, которое понадобится вам, чтобы перейти на следующий уровень, около 25-40 часов без перерыва.

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

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

    На этом уровне нужно закончить с теорией Computer Science, для этого неплохо бы изучить более углубленно такие алгоритмы, как динамическое программирование, рекурсия, backtracking, greedy, алгоритм разделяй и властвуй, алгоритм флойда, алгоритм гауса, более сложные структуры данных, разные варианты деревьев, какие бывают графы и способы оптимального решения таких задач (DFS, BFS).

    Популярные алгоритмы

    По мере решения задач из роадмапа, вы столкнётесь со всеми этими алгоритмами и структурами данных. Если вам хочется больше, идёте в NeetCode All и берёте задачу оттуда. Также в литкоде можно отсортировать задачи по тегам, например, динамическое программирование, Problems -> Tags.

    Поиск задач определенной тематики

    Уровень 3. Любитель. Решенных задач 100-300

    Как определить

    90% решаемых задач на этом уровне — Medium, 5% — Easy, 5% — Hard

    Когда у вас 100 решённых задач вы уже должны знать все алгоритмы и структуры данных, которые могут попасть в 99% задач на литкоде и, в общем, в алгоритмических секциях на собеседованиях. Уровень написания вашего кода должен быть доведён до автоматизма, вы должны быстро понимать какая структура данных, как пройтись, как изменить определённый элемент, какими способами лучше решать оптимально задачу на ту или иную структуру данных, как работает рекурсия, в каком месте ставить указатели, как определить миддл из массива чисел, как крутить деревья в конце концов! Вы должны быть профи в основах Computer Science. Если это еще не так, стоит остановиться и пройтись по всей теории, чтобы больше не тратить на нее время, потому что дальше будет только практика. Прочитать можно, например, эту книжку, она легко читается, но я бы посоветовал еще почитать другие статьи и посмотреть несколько видео.

    Грокаем алгоритмы от Адитья Бхаргава

    Как пройти на следующий уровень

    Время, которое понадобится вам, чтобы перейти на следующий уровень около 150-200 часов без перерыва

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

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

    На собеседовании у вас будет 45 минут на решение задачи, это вместе с объяснением условий задачи. На этом этапе вам нужно стремиться к решению задачи оптимальным способом за 25 минут, потому что собеседующий может добавить follow up к задаче и вы должны его решить в изначальное отведенное время. Достигаете 300 задач и поехали дальше!

    Уровень 4. Эксперт. Решенных задач 300-1000

    Как определить

    70% решаемых задач на этом уровне — Medium, 25% — Hard, 5% — Easy

    Это уровень, где вы уже можете подаваться в FAANG подобные компании, если вы в нижней границе решенных задач, вы можете пройти, если вам повезет с интервьюером и задачки будут +- в отраслевых стандартах, без заковыристых edge cases и кучи динамического программирования.

    Оптимально, если вы решили 500-600 задач, редко видел отзывы кто не проходил алго-секцию с таким уровнем решенных задач, если вы ближе к 1к решенных задач и не прошли алго-секцию, вам срочно нужно подтянуть английский, с 99% вероятностью интервьюеру не понравились ваши коммуникативные навыки.

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

    Вот по каким критериям оценивает Google (от ex googler):

    1. Алгоритмы. В начале, не написав ни строчки кода, вы должны объяснить, как вы будете решать эту задачу, какие алгоритмы и структуры данных будете использовать, какая сложность по времени и памяти у них. Сначала лучше предложить брут форс решение, если есть несколько оптимальных, предложить все.
    2. Кодинг. Вы должны озвученные ранее мысли по решению задачи изложить в коде. В идеале вы должны написать хорошо читаемый код с хорошо именованными переменными, методами и т.д. Ну и, конечно, написанный код должен работать и покрывать все кейсы, даже если вы его не запустите, что, скорее всего, будет так, так как вы будете все писать на пустом листке, без всяких подсвечиваний синтаксиса (лучше готовится к этому, если вам предложат писать в каком-то онлайн-редакторе кода, будем считать, что вам повезло).
    3. Коммуникация. Это самое сложная часть для всех не англоговорящих или просто интровертов. Вы должны комментировать каждую написанную вами строчку, почему вы ее пишете и к чему она приведет. Также вы должны разговаривать на общие и профессиональные темы по ходу интервью, здесь могут проверять ваши софт скиллы, даже не дойдя до этапа behavioral.
    4. Способ решения проблемы. Вы с самого начала должны по полочкам расставить условия задачи и задавать уточняющие вопросы и выяснить, какие edge cases могут быть. По мере написания кода вы должны разделять задачи на подзадачи, если это нужно, не писать сумбурно и все переписывать, ваш алгоритм должен быть понятен собеседующему на 100%.

    В скрине ниже описана структура, как оценивается кандидат в Гугл. Скрин взят отсюда — начиная от 52:00

    Метрики оценки на алго секции от бывшего работника Google

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

    Как пройти на следующий уровень

    Время, которое понадобится вам, чтобы перейти на следующий уровень около 300-600 часов без перерыва

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

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

    Господа, здесь моя остановочка, дальше сами!

    Уровень 5. Бог. Решенных задач 1000+

    Как определить

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

    Как пройти на следующий уровень

    To infinity and beyond?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *