Тренажёр программирования LeetCode — что это и как его использовать
С LeetCode подготовиться к техническому собеседованию в разы проще. Это сайт, на котором собрано большое количество задач по кодированию и программированию в целом. Регулярные занятия на платформе приведут к желаемому результату — так говорят те, кому LeetCode помог добиться поставленной цели и получить работу. Статья будет полезна тем, кто хочет стабильно решать задачи по программированию, повысить свои навыки и научиться пользоваться этим сервисом.
Тренажёр LeetCode поддерживает множество языков программирования. Изучить их можно на онлайн-курсах. Например, «Java-разработчик» от Логомашины или «Java-разработчик с нуля» от Нетологии.
LeetCode — что это?
LeetCode — сайт, на котором размещены IT-задачи. Они постоянно обновляются, дополняются и актуализируются. В среде программистов 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. В нём написано, как устроен сайт, что нужно сделать, чтобы начать работу и какую стратегию обучения лучше всего выбрать новичкам. Здесь всё на английском, из стран для выбора — США и Китай.
В гайде указано то, о чём мы писали чуть выше — у задач три уровня сложности. Для правильного выбора уровня нужно уметь оценивать свою подготовку и знать, какие темы нуждаются в дополнительном изучении. Если вы понимаете, что пробелов много и они есть практически по всем темам, точно выбирайте лёгкие упражнения. Постепенно вы будете пополнять багаж знаний и выбирать более сложные кейсы. Важно отметить, что без начальных знаний о структурах алгоритмических данных будет сложно выполнять даже самые простые задачки. Поэтому заранее стоит пройти соответствующий курс.
Вам нужно не только повышать уровень сложности, но и следить за числом принятия упражнений — Acceptance. Этот показатель отражает соотношение правильных решений ко всем отправленным. Чем он ниже, тем труднее будет справиться с задачей. Случается, что схожие задачи среднего уровня имеют совершенно разный acceptance — например, 72% и 87%.
В этом же разделе есть курсы по разным темам — в них степень сложности увеличивается от задачи к задаче. Среди популярных тематик — SQL, Decision Tree, Sorting, View, Data coding. После регистрации и создания профиля можно изучить и войти в раздел Problems. Если пролистать чуть ниже, вы увидите кнопки All topics, Algorithms, Database, Best solutions ago и другие. Над ними — хэштеги с количеством задач по каждому из направлений. Не начинайте решать сразу весь раздел по порядку — воспользуйтесь фильтром, который станет помощником в выборе подходящей темы и сложности задач. Можете не переживать за конфиденциальность информации и личных данных — сервис обеспечивает её в полной мере.
Всегда ориентируйтесь на свои ощущения в плане сложности. Если понимаете, что времени уходит много, понижайте уровень. Чувствуете, что справляетесь быстро и у вас низкий процент принятия — смело повышайте сложность и пробуйте снова. Самое важное на первом этапе — это рассортировать задания в приложении по уровню и тематикам. Даже опытные разработчики сталкиваются с появлением пробелов в знаниях из-за отсутствия практики в этом направлении. И в случае с первичным изучением темы, и с восполнением пробелов лучше идти по порядку. На сайте есть текстовые материалы и статьи, которые подробно описывают тему — если не хватает объяснений, за помощью можно обратиться в поддержку или комьюнити.
Как понять, что тема закрыта и вы всё усвоили? Вы можете переходить к следующему разделу, когда справитесь со всеми заданиями простого и среднего уровня сложности. Не все сложные задачи требуют столько внимания, сколько вы думаете. На собеседованиях чаще всего попадаются именно medium кейсы, а hard — это больше задания со звёздочкой, их можно сравнить с олимпиадными уравнениями.
Что нужно для продуктивной работы в LeetCode?
Сразу после регистрации мы врываемся в бой и хотим решить все задачи на свете. Мотивация — это хорошо, но такой подход чаще всего заканчивается выгоранием и желанием бросить обучение спустя неделю. Мы за постепенное погружение в процесс. Поэтому хотим отметить важные моменты, которые влияют на продуктивность и прогресс.
1. Вы только знакомитесь с Литкод? Не заходите в раздел Contest. Здесь нужно решить 3 задачи за 1 час, причём всё проходит в формате соревнования, где в роли соперников выступают профессиональные программисты, которые участвуют в соревнованиях на Codeforces. Если начнёте с этого, можете резко подорвать веру в себя и свои силы.
2. Не сидите долго над одной задачей. В Литкод всё устроено так, что на решение одной таски не должно уходить по 40-60 минут. Стоит уделять тренажёру от 40 до 60 минут времени. В среднем на задачу уходит от 15 до 20 минут. В сложных случаях — 25.
3. Когда понимаете, что долго не можете решить новую задачу, отправляйтесь в раздел Discuss. В нём люди обсуждают, какие проблемы возникают при выполнении, как можно решить топик на одном из языков программирования и почему не удаётся выполнять ежедневную норму. Особенно интересно читать комментарии, где можно поделиться сложной задачей или пожаловаться на ошибку в функционировании системы.
4. Заранее готовьтесь к собеседованию или другому событию, где нужно решать задачи. Многие воспринимают работу с LeetCode в качестве соревнования, где нужно успеть всё сделать вперёд и стать самым опытным и знающим. Платформа будет помогать, если вы посмотрите на неё, как на обучающий сервис, который со временем вам понравится.
5. Используйте раздел «Подборки» — сюда можно добавить задания, которые не хочется потерять. Например, у вас не получается сделать задание. Вместо того, чтобы пропустить — сохраните. А когда появится время, вернитесь назад и попробуйте снова. Перед этим можете почитать инструкции и спросить совет у других программистов, а также нажать «share», чтобы поделиться оригиналом упражнения .
6. Не двигайтесь хаотично, составьте систему или план, который поможет в достижении целей. Одна из главных ошибок — выполнять задания в разброс и не отслеживать прогресс. Вам подойдёт путь постепенного возрастания сложности — от простых задач до средних, с включением в план сложных кейсов для углубления в тему.
7. Выбираете между LeetCode и Codewars – не хватайтесь за всё и сразу. Никто не скажет, что из этого лучше, поэтому попробовать себя можно и там, и там. Но для конкретных задач выбрать одну программу. Например, в Codewars упражнения доступны более чем на 60 языках, но чаще всего используют Python. А уровней не 3, а целых 8. Можно сказать, что сервис имеет больший масштаб и популярность по всему миру.
8. Отслеживайте статистику в профиле и ведите календарь, в котором отмечаете дни с LeetCode. Это поможет понять, какие темы ещё нужно повторить, а что можно поставить на стоп. Из-за разнообразия упражнений и тематик многие сталкиваются с невозможностью отслеживать прогресс — в рамках одного направления часто происходит так, что на выполнение задач одного уровня сложности уходит разное количество времени. Это нормально, нужно привыкнуть к тому, что деление на уровни всё же условно.
9. Делайте маленькие шаги и придерживайтесь подходящей для себя стратегии. Работе с LeetCode в день достаточно уделять 50-60 минут. Вы сами можете выбрать, когда это делать — утром, в обед или вечером. Здесь всё зависит от загруженности. Главное — не перегружать себя и давать отдых нервной системе.
Плюсы LeetCode для программистов
- Сервис помогает найти путь решения проблемы, а не просто подобрать подходящий алгоритм. Это помогает в работе, когда нужно отследить путь появления ошибки, выявить причину.
- Повышается скорость закрытия простых тасков, развивается навык решения на автомате — в деятельности разработчиков тоже есть рутина, некоторые задачи нужно выполнять быстро, но при этом качественно.
- Количество ошибок становится гораздо меньше, ведь перед тем, как отправить готовый ответ, нужно по несколько раз проверить правильность решения. Это помогает учитывать и просчитывать сразу несколько вариантов развития событий.
- Легче учить другие языки сразу на практике, параллельно погружаясь в теорию в виде материалов на сайте. Новички особенно стараются сделать код чистым, написать к нему понятное объяснение.
Я решил 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 что это
Smart Tools
glTF 3D Editor
Color Editor
A Step-by-Step Guide to Exporting glTF Files
What are Unicons and Icon Fonts? How to use?
Edit Lottie Animations With Lottie Editor
Insert design assets and animations in Figma
Грокаем алгоритмы: Гайд по алгоритмам для тех, кому сложно решать задачи
Эта статья — для разработчиков, которые частично уже знают алгоритмы. Если вы еще не знакомы с ними, советуем пройти трек «Алгоритмы и структуры данных» в Хекслете. Вы изучите списки, стеки, очереди, структуры данных, которые помогут проектировать структуры и алгоритмы.
Бесплатные курсы по программированию в Хекслете
- Освойте азы современных языков программирования
- Изучите работу с Git и командной строкой
- Выберите себе профессию или улучшите навыки
Грокать алгоритмы или не грокать? Что делать, если вам не хочется решать сто задач к вашему следующему собеседованию?
Часть меня ненавидит технические собеседования, в первую очередь из-за того, что мне нужно повторять много материала. Кроме того, в процессе самого собеседования мне часто приходится предлагать какое-то особенное решение, а не то, которое я бы выбрал в своей будничной практике.
Несмотря на это, я люблю алгоритмы и люблю решать задачки по программированию. Для меня это веселое времяпровождение и хорошая тренировка для мозга. Учитывая все это, хочу рассказать вам о моей собственной технике подготовки к собеседованиям, которая намного интереснее и волнительнее, чем обычная подготовка.
Коротко расскажу о себе, чтобы вы убедились в моей экспертности. Я программирую уже 20 лет, за это время я много раз менял место работы. Всего я прошел около 30 воронок найма — больше 120 собеседований. Плюс к этому у меня есть опыт с той стороны баррикад: я провел около 300 технических собеседований и больше 200 собеседований по системному дизайну .
Где мы грокаем алгоритмы
Если вы когда-нибудь искали работу, то знаете, что есть ресурсы, которые собирают задачи с собеседований . Один из них — LeetCode, это самый популярный сайт, где очень много задач. Плюс вокруг него сложилось развитое сообщество, где можно обсуждать задачки с другими инженерами. Если выдается свободная минутка, я всегда не прочь провести ее на LeetCode. Там я решаю задачи или читаю чужие решения, после чего сравниваю со своими.
Самая большая проблема LeetCode в том, что сайту не хватает продуманной системы обучения. У него много разных задач, в которых легко потеряться. Сколько нужно таких задач, чтобы подготовиться к собеседованию? Я бы предпочел двигаться по продуманной программе, в конце которой я смогу ощутить уверенность в собственных знаниях. Но системы нет, а я ленивый, и вообще — не хочу решать 500+ задач.
Одно из популярных решений для этой проблемы — решать задачи, которые относятся к одной структуре данных (например, прорешать несколько задач с деревьями). Какая-то система обучения появляется, но это решение меня все равно не устраивает. Например, что делать, если задачу можно решить при помощи разных структур данных?
Какую систему обучения придумал я
Я бы предпочел такую систему, в которой задачи распределены по паттернам, а не по структурам данных. Мои любимые паттерны — скользящее окно, нахождение цикла и топологическая сортировка. Когда я научился пользоваться этими методами, я стал решать незнакомые задачи по аналогии с задачами, которые решал до этого. Благодаря этому весь процесс подготовки к собеседованиям стал более интересным и веселым. Ну и конечно же, более систематичным.
Я обнаружил 25 паттернов, которые лежат в основе решения большинства задач. Думаю, эти паттерны помогут кому угодно показывать на собеседованиях красивые и элегантные решения. Вся фишка этих паттернов в том, что понимая один из них, вы научитесь решать сразу несколько задач, десятки задач.
Самые распространенные паттерны для решения задач
- Метод скользящего окна
- Метод двух указателей
- Нахождение цикла
- Интервальное слияние
- Цикличная сортировка
- In-place Reversal для LinkedList
- Поиск в ширину
- Поиск в глубину
- Двоичная куча
- Подмножества
- Усовершенствованный бинарный поиск
- Побитовое исключающее ИЛИ
- Top K Elements
- K-образное слияние
- Задача о рюкзаке 0-1
- Задача о неограниченном рюкзаке
- Числа Фибоначчи
- Наибольшая последовательность-палиндром
- Наибольшая общая подстрока
- Топологическая сортировка
- Чтение префиксного дерева
- Задача: количество островов в матрице
- Метод проб и ошибок
- Система непересекающихся множеств
- Задача: найти уникальные маршруты
Читайте также: Это снова я, резиновая уточка: что такое метод Фейнмана и почему с его помощью так просто изучать программирование
Метод скользящего окна
Контекст: Мы используем этот метод, когда у нас есть входные данные с заданным размером окна.
Задачи для этого паттерна:
- Longest Substring with K Distinct Characters
- Fruits into Baskets
- Permutation in a String
Метод двух указателей
Контекст: Мы используем два указателя, чтобы перебрать все входные данные. Обычно два указателя движутся в противоположных направлениях с фиксированным интервалом.
Задачи для этого паттерна:
- Squaring a Sorted Array
- Dutch National Flag Problem
- Minimum Window Sort
Нахождение цикла
Контекст: Еще этот алгоритм называют алгоритмом черепахи и зайца. В отличие от предыдущего метода, два указателя тут движутся с разной скоростью.
Задачи для этого паттерна:
- Middle of the LinkedList
- Happy Number
- Cycle in a Circular Array
Интервальное слияние
Контекст: Этот метод применяют, если есть пересекающиеся интервалы. Например, на этом изображении мы видим, что интервалы a и b могут пересекаться шестью разными способами:
Задачи для этого паттерна:
- Intervals Intersection
- Conflicting Appointments
- Minimum Meeting Rooms
Цикличная сортировка
Контекст: Если входные данные лежат в заданном интервале, используйте цикличную сортировку.
Задачи для этого паттерна:
- Find all Missing Numbers
- Find all Duplicate Numbers
- Find the First K Missing Positive Numbers
In-place Reversal для LinkedList
Техника: Эта техника описывает эффективный способ перевернуть связи между узлами в LinkedList (класс Java). Часто мы ограничены in-place, то есть мы должны использовать исходные узлы.
Задачи для этого паттерна:
- Reverse every K-element Sub-list
- Rotate a LinkedList
Поиск в ширину
Контекст: Это метод для решения задач с деревьями.
Задачи для этого паттерна:
- Binary Tree Level Order Traversal
- Minimum Depth of a Binary Tree
- Connect Level Order Siblings
Поиск в глубину
Контекст: Тот же, что для предыдущего метода.
Задачи для этого паттерна:
- Path With Given Sequence
- Count Paths for a Sum
Двоичная куча
Контекст: Во многих задачах у нас есть набор элементов, который можно разделить на две части. Тогда мы могли бы выяснить, какой элемент является наименьшим в первой куче и какой является наибольшим во второй куче.
Задачи для этого паттерна:
- Find the Median of a Number Stream
- Next Interval
Подмножества
Контекст: Если задача требует перестановки или комбинаций элементов, используйте подмножества.
Задачи для этого паттерна:
- String Permutations by changing case
- Unique Generalized Abbreviations
Усовершенствованный бинарный поиск
Контекст: Эта техника использует логический оператор для наиболее эффективного поиска элементов.
Задачи для этого паттерна:
- Two Single Numbers
- Flip and Invert an Image
Наибольшее K элементов
Контекст: Эта техника используется, чтобы найти наибольший/наименьший или наиболее часто встречающийся набор k-элементов в коллекции.
Задачи для этого паттерна:
- ‘K’ Closest Points to the Origin
- Maximum Distinct Elements
Читайте также: Как решить задачу, если непонятно, с чего вообще начать: советы от Хекслета
K-образное слияние
Контекст: Используйте эту технику, если у вас есть список отсортированных массивов.
Задачи для этого паттерна:
- Kth Smallest Number in M Sorted Lists
- Kth Smallest Number in a Sorted Matrix
Рюкзак 0-1
Контекст: Этот паттерн используют для задач на оптимизацию. Используйте эту технику, чтобы выбирать элементы, которые дают максимум выгоды в данном наборе ограничений по вместимости. Учитывая то, что каждый элемент может быть выбран лишь единожды.
Задачи для этого паттерна:
- Equal Subset Sum Partition
- Minimum Subset Sum Difference
Неограниченный рюкзак
Контекст: То же самое, что в предыдущем паттерне, но только каждый элемент может быть выбран повторно сколько угодно раз.
Задачи для этого паттерна:
- Rod Cutting
- Coin Change
Числа Фибоначчи
Контекст: Как очевидно из названия, это паттерн для чисел Фибоначчи. Это последовательность, в которой каждое последующее число равно сумме двух предыдущих чисел.
Задачи для этого паттерна:
Наибольшая последовательность — палиндром
Контекст: Имеется в виду задача, которая может быть использована как для последовательности, так и для строк . По сути это задача на оптимизацию.
Задачи для этого паттерна:
- Longest Palindromic Subsequence
- Minimum Deletions in a String to make it a Palindrome
Наибольшая общая подстрока
Контекст: Как понятно из названия, это паттерн для работы со строками или другими последовательностями, а также для работы с наборами строк или последовательностей.
Задачи для этого паттерна:
- Maximum Sum Increasing Subsequence
- Edit Distance
Чтение префиксного дерева
Контекст: Это специфичная для структуры данных техника, с помощью которой читают или создают префиксное дерево.
Задачи для этого паттерна:
- Longest Word in Dictionary
- Palindrome Pairs
Острова в матрице
Контекст: Этот паттерн подходит для чтения любого двумерного массива, где нам нужно обнаружить связанные между собой элементы.
Задачи для этого паттерна:
- Number of Distinct Islands
- Maximum Area of Island
Путь проб и ошибок
Контекст: Этот паттерн подойдет для того, чтобы пройтись по массиву в поисках подходящего под требования элемента.
Задачи для этого паттерна:
- Find Kth Smallest Pair Distance
- Minimize Max Distance to Gas Station
Система непересекающихся множеств
Контекст: Если данные раскиданы по непересекающимся множествам, то они решаются одним и тем же способом.
Задачи для этого паттерна:
- Number of Provinces
- Bipartite Graph
Поиск уникального маршрута
Контекст: Этот паттерн подойдет для прохождения по любому многомерному массиву.
Задачи для этого паттерна:
- Find Unique Paths
- Dungeon Game
Бесплатные курсы по программированию в Хекслете
- Освойте азы современных языков программирования
- Изучите работу с Git и командной строкой
- Выберите себе профессию или улучшите навыки