Leetcode что это
Перейти к содержимому

Leetcode что это

  • автор:

Тренажёр программирования 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 для программистов

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

Я решил 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

A Step-by-Step Guide to Exporting glTF Files

What are Unicons and Icon Fonts? How to use?

What are Unicons and Icon Fonts? How to use?

Edit Lottie Animations With Lottie Editor

Edit Lottie Animations With Lottie Editor

Insert design assets and animations in Figma

Insert design assets and animations in Figma

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

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

Эта статья — для разработчиков, которые частично уже знают алгоритмы. Если вы еще не знакомы с ними, советуем пройти трек «Алгоритмы и структуры данных» в Хекслете. Вы изучите списки, стеки, очереди, структуры данных, которые помогут проектировать структуры и алгоритмы.

Бесплатные курсы по программированию в Хекслете

  • Освойте азы современных языков программирования
  • Изучите работу с Git и командной строкой
  • Выберите себе профессию или улучшите навыки

Грокать алгоритмы или не грокать? Что делать, если вам не хочется решать сто задач к вашему следующему собеседованию?

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

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

Коротко расскажу о себе, чтобы вы убедились в моей экспертности. Я программирую уже 20 лет, за это время я много раз менял место работы. Всего я прошел около 30 воронок найма — больше 120 собеседований. Плюс к этому у меня есть опыт с той стороны баррикад: я провел около 300 технических собеседований и больше 200 собеседований по системному дизайну .

Где мы грокаем алгоритмы

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

Самая большая проблема LeetCode в том, что сайту не хватает продуманной системы обучения. У него много разных задач, в которых легко потеряться. Сколько нужно таких задач, чтобы подготовиться к собеседованию? Я бы предпочел двигаться по продуманной программе, в конце которой я смогу ощутить уверенность в собственных знаниях. Но системы нет, а я ленивый, и вообще — не хочу решать 500+ задач.

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

Какую систему обучения придумал я

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

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

Самые распространенные паттерны для решения задач

  1. Метод скользящего окна
  2. Метод двух указателей
  3. Нахождение цикла
  4. Интервальное слияние
  5. Цикличная сортировка
  6. In-place Reversal для LinkedList
  7. Поиск в ширину
  8. Поиск в глубину
  9. Двоичная куча
  10. Подмножества
  11. Усовершенствованный бинарный поиск
  12. Побитовое исключающее ИЛИ
  13. Top K Elements
  14. K-образное слияние
  15. Задача о рюкзаке 0-1
  16. Задача о неограниченном рюкзаке
  17. Числа Фибоначчи
  18. Наибольшая последовательность-палиндром
  19. Наибольшая общая подстрока
  20. Топологическая сортировка
  21. Чтение префиксного дерева
  22. Задача: количество островов в матрице
  23. Метод проб и ошибок
  24. Система непересекающихся множеств
  25. Задача: найти уникальные маршруты

Читайте также: Это снова я, резиновая уточка: что такое метод Фейнмана и почему с его помощью так просто изучать программирование

Метод скользящего окна

Контекст: Мы используем этот метод, когда у нас есть входные данные с заданным размером окна.

Задачи для этого паттерна:

  • 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 и командной строкой
  • Выберите себе профессию или улучшите навыки

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

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