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

Steven Anderson
В современном мире удаленная работа становится все более популярной. Большое количество компаний и предпринимателей выбирают такой формат работы, чтобы упростить процессы и обеспечить гибкость в работе. Одним из незаменимых инструментов для удаленной работы являются виртуальные серверы (VPS/VDS). В данной статье мы рассмотрим преимущества VPS/VDS серверов Mail.ru, а также основные параметры, которые следует учитывать при выборе этого инструмента.
Одним из важных факторов, которые следует учитывать при выборе виртуальных серверов, является тип используемых накопителей. Mail.ru предоставляет доступ к накопителям SSD eMLC для своих VPS/VDS серверов на Windows и Linux. Это позволяет обеспечить высокую производительность и надежность работы приложений на обеих операционных системах. Благодаря этому, вы можете быть уверены в бесперебойной работе вашего проекта независимо от выбранной операционной системы.
Другим важным аспектом является защита от DDoS-атак. Mail.ru предлагает встроенную защиту от DDoS для своих VPS/VDS серверов на Windows и Linux. Это обеспечивает непрерывную работу вашего проекта даже в условиях массированных атак, защищая вашу инфраструктуру и данные.
Надежность и доступность сервера также являются важными параметрами при выборе виртуальных серверов. Mail.ru размещает свои VPS/VDS серверы в Центрах обработки данных (ЦОД) уровня TIER III, что гарантирует надежность и доступность сервера на уровне 99,982%. Это позволяет вам быть уверенными в стабильной работе вашего веб-проекта, независимо от выбранной операционной системы.
Еще одним важным фактором является скорость интернет-соединения. Mail.ru предоставляет возможность использования VPS/VDS серверов на Windows и Linux с высокоскоростным интернетом до 1000 Мбит/с. Это обеспечивает быструю загрузку веб-страниц и высокую производительность онлайн-приложений на обеих операционных системах.
Компания Mail.ru предлагает специальную акцию — скидку 10% на все VPS/VDS серверы Windows и Linux. Таким образом, вы можете получить доступ ко всем преимуществам, которые предоставляются серверами Mail.ru, по более выгодной цене.
Не упустите возможность улучшить работу вашего веб-проекта с помощью VPS/VDS серверов Mail.ru. Высокая производительность, надежная защита, доступность и высокоскоростной интернет — все это доступно по доступной цене, с дополнительной скидкой 10%. Выбирайте VPS/VDS серверы Mail.ru и наслаждайтесь удобством удаленной работы.
Подготовка к 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
Как задачи на LeetCode прокачали меня как разработчика, или по-честному про алгоритмы
Культ лайвкодинга и алгоритмических задач процветает до сих пор. Вопросы в стиле «как преобразовать бинарное дерево» или «как написать пирамидальную сортировку» регулярно встречаются на собеседованиях не только в бигтехе — хотя это и не те задачи, которые каждый день решает среднестатистический разработчик. Из-за этого многие программисты начинают искренне ненавидеть алгоритмы.
Однажды я зашла на LeetCode, одну из популярных платформ для решения алгоритмических задач. Сразу уточню: мне не нужно было готовиться к собеседованию, и моя работа не требовала продвинутого знания алгоритмов. Тем не менее я заметила, что у меня стали заполняться пробелы в знаниях, и я продолжила решать задачи — каждый день понемногу.
С тех пор у меня накопилось более 400 решённых задач на LeetCode. Теперь я уверена, что такие платформы как LeetCode, HackerRank или CodeWars, при правильном подходе, способны поднять профессиональные навыки любого разработчика на новый уровень.
Вот чему я научилась за год ежедневного решения задач:
- В моём коде стало меньше багов. Навык самопроверки улучшился, появилась привычка думать об ограничениях и пессимистичных сценариях;
- При этом заметно увеличилась скорость написания кода. Многие вещи теперь делаются на «автомате»;
- Я больше не боюсь сложных рабочих задач;
- Я научилась качественнее объяснять свои решения и больше думать о чистоте кода;
- Мой уровень самодисциплины возрос.
Но обо всём по порядку.

1. Больше внимательности, меньше багов
Привычка думать о случаях, в которых написанный тобой код «сломается», – очень полезна для разработчиков.
Я люблю LeetCode за то, что он мягко заставляет тебя если не писать, то хотя бы мысленно просчитывать разные тестовые сценарии. Перед тем, как принять решение задачи, платформа всегда проверяет его по многочисленным тестам.
Может случиться так, что падает всего один сценарий из сорока, и он вынуждает тебя переписывать половину твоего кода. Это может сильно раздражать. Да и в целом видеть после отправки решения грустные красные буквы «Wrong Answer» – удовольствие ниже среднего. Особенно если задача сложная.
Поэтому с увеличением количества решённых проблем я заметила, что стала чаще анализировать указанные ограничения перед тем, как приниматься за задачу; больше думать о том, в каких случаях код даст сбой; и проверять всё больше тестовых случаев перед тем, как отправить итоговое решение.
Особенно приятно то, что с течением времени это стало проявляться не только при решении алгоритмических задач, но и на моей работе, а также при написании собственных проектов. Как правило, в обычной рабочей атмосфере нам не высвечиваются слова «Wrong Answer», когда мы допустили ошибку — это всплывает позднее в виде бага у клиента.
Поэтому задаваться вопросами в духе «упадёт ли моя функция, если входные данные были очень большие или, наоборот, пустые» – отличная привычка. Тренировка на коротких алгоритмических задачах помогает развить её лучше всего.
Что ещё поможет, чтобы наработать внимательность и делать меньше ошибок?
- Обращать внимание, как те или иные ограничения в задаче влияют на предполагаемое решение. Например, если в массиве может быть миллиард элементов, то решение брутфорсом вряд ли подойдёт;
- Анализировать, насколько велика сложность решения по времени и по памяти, используя нотацию «О» большое. Не стоит обращать внимание на процент «успешности» времени выполнения кода, который показывает Leetcode после отправки. Он бесполезен; в этой статье подробно рассказывается, почему это так;
- Всегда помнить про пессимистичные сценарии, а не только про общие.
2. Скорость написания кода растёт, решения изобретаются быстрее
Я не ожидала этого, но с приятным удивлением заметила через полгода: у меня стало уходить примерно в 1.5 раза меньше времени на задачу по сравнению с тем, когда я начинала.
С чем это связано? Даже при выборе разнообразных задач в них прослеживаются общие паттерны и подходы к решению. Например, обход бинарного дерева – через несколько месяцев периодического решения «деревьев» ты напишешь этот алгоритм с закрытыми глазами и без лишних раздумий.
Это касается и скорости выбора способа решения. В своё время я набила шишек, выбирая изначально неверный подход к задаче. Это нормальный процесс обучения; сейчас я быстрее соображаю, куда нужно пойти в начале, чтобы с большей вероятностью выйти на верный ответ. Например, если не знаешь, как решить задачу, где в качестве входных данных даётся массив элементов, то сначала попробуй отсортировать его.
Может быть, вам никогда не понадобятся алгоритмы из сложных задач на Leetcode. Но быстро писать реализацию несложных вещей и совершенно не задумываться над ней довольно неплохо, не правда ли?
Вот мои советы по развитию скорости:
- Осваивайте темы в комфортном для себя темпе, переходите к следующей, только когда вы уже чувствуете уверенность в текущей. Например, сначала прорешайте 7 лёгких задач на деревья, 10 средних и 4 сложных, и только затем переходите, например, к спискам. Я не советую брать каждый день случайные задачи, поскольку это не позволяет сфокусироваться на освоении конкретной темы;
- Не забывайте повторять старые темы. Даже если вы освоили тему деревьев, выполняйте задание по ним каждые пару недель;
- Попробуйте решить лёгкую для себя задачу, но введя ограничение по времени, – например, десять минут. Иногда создание искусственной нехватки времени может заметно увеличить продуктивность.
3. Прививка от страха перед сложными задачами
Я не пытаюсь продвигать иллюзию того, что продвинутое знание алгоритмов, вообще-то, абсолютно необходимый навык, без которого нельзя стать программистом. Для определённых разработчиков, работающих со сложными предметными областями и оптимизациями, – вполне возможно, это будет очень нужно. Но не всем подряд.
Я – фронтенд-разработчик, и за последний год встречалась с необходимостью использовать нетривиальные алгоритмы несколько раз. Наиболее сложные случаи были связаны с визуализацией графов.
Но хоть это и было несколько раз, я чётко осознаю, что столкнись я с такими задачами раньше – я бы испугалась сильнее и потратила бы на задачу больше нервов и времени. Однако с закалкой на LeetCode я восприняла их не как «что-то новое и страшное», а «наконец-то интересное и азартное».
Алгоритмические задачи не только отлично готовят к сложным рабочим задачам, которые встречаются редко, но метко. Я заметила, что активное решение лёгких задач позволяет нарабатывать автоматизм и даже подтянуть знание языка программирования.
Например, сейчас я совершенно не задумываюсь, как работают встроенные методы в JS: что возвращает .push() , или мутируют ли исходный массив методы .slice() или .splice() . Эти знания нельзя назвать алгоритмическими, однако регулярное решение LeetCode помогает твёрдо их усвоить.
Вот как можно начать чувствовать себя намного увереннее независимо от уровня сложности задачи:
- Некоторые сложные задачи могут быть довольно экзотическими, так что не расстраивайтесь и не опускайте руки, если не можете их решить. Даже если вы готовитесь к собеседованию, по статистике, они встречаются очень редко.
- Не забывайте пробовать применять полученные знания на работе (‘use it or you lose it’). Например, когда это уместно и имеет смысл, попробуйте использовать структуру данных Set вместо Array;
- Если вы только осваиваете новый язык программирования, то простейшие задачи хорошо помогают с этим. Вы поймёте синтаксис и особенности языка намного быстрее, чем если бы просто читали теорию.
4. Почва для искусства объяснения решений и чистого кода
Пару раз я натыкалась на критику, что сайты вроде LeetCode плохи тем, что они позволяют писать код как угодно грязно, лишь бы он работал. Это верно; но приучение разработчика писать чисто и не является их основной целью.
Тем не менее я заметила, что всё же есть возможность научиться писать код чище и объяснять решения, используя LeetCode. Почти всегда на подобных сайтах есть раздел, где разработчики публикуют собственные решения. Иногда их можно оценивать, и тогда в топ попадают наиболее понятные решения с лучшими объяснениями.

Когда я начала прояснять непонятные задачи, вчитываясь в решения и объяснения опытных разработчиков, мой процесс обучения пошёл в гору. Я и сама попробовала выкладывать собственные решения. К тому времени я поняла, что людям полезно, когда решения объяснены кратко, но ясно.
И тогда я стала работать над детальным описанием решений, а ещё над чистотой кода — стыдно ведь выложить грязное решение на общий суд. Мне хотелось, чтобы мой вариант был максимально понятным и читаемым. Впоследствии я заметила, что стала переносить этот принцип и в рабочие задачи. А ещё – лучше объяснять свои решения коллегам.
Так как же улучшить навык чистого кода и объяснения решений, пользуясь LeetCode?
- Не стесняйтесь публиковать свои решения, даже если они не уникальны (только сначала постарайтесь максимально почистить код);
- Потренируйтесь писать объяснения своих решений. Постарайтесь формулировать их так, чтобы всё понял даже новичок;
- Решив задачу, посмотрите решения, находящиеся в топе выложенных. Это позволит научиться не только новым подходам, но и тому, как качественно умеют преподнести своё видение проблемы некоторые разработчики.
5. Развитие самодисциплины
В любом деле важна мотивация и регулярность, будь то вышивание, занятия спортом или решение алгоритмических задач. Если мотивация заниматься на LeetCode уже появилась – из-за желания получить работу мечты или из-за чего-то ещё — то дело остаётся за регулярностью.
Я сделала решение задач своей привычкой и твёрдо решила, что буду находить время для этого время каждый день – хотя бы по полчаса. Когда копится стрик на протяжении одного, двух, трёх месяцев, пропустить новый день становится уже обидно.
Будет легче, если решать задачи каждый день в одно и то же время. Я выбрала время утром перед работой, но кому-то удобнее заниматься вечером. При выборе важно учитывать свой уровень интеллектуальной активности в течение дня, у всех он разный.
Несколько советов, чтобы сохранять мотивацию для достижения регулярности (без неё никуда):
- Не пытайтесь каждый день решать много сложных задач, вы просто быстро выгорите. Постепенно увеличивайте сложность и уделяйте задачам определенное время (например, сорок минут в день);
- Отслеживайте свой прогресс. Вы можете вести календарь и отмечать каждый день, когда садились за решение задач. Когда мотивация угасает, посмотрите, как далеко вы уже продвинулись;
- Никогда не сравнивайте себя с другими. Чье-то опубликованное решение может выглядеть намного лучше вашего, но как узнать, сколько лет этот программист потратил на изучение алгоритмов?
- Ежедневно хвалите себя: как только вы начинаете день, вы уже начинаете знать немного больше, чем вчера.
Подводя итоги. Чему же я всё-таки научилась?
За год на LeetCode я поняла, что алгоритмические задачи – не панацея, но отличные помощники. Они способны привить автоматизм при написании рутинного кода, убрать страх трудностей, приучить думать о разных тестовых сценариях. Публикация решений, с учётом старания сделать их чистыми и детальными, позволяет прокачать навык объяснения своего кода.
И даже если вы не стремитесь на собеседование лайвкодингом, самодисциплина, прокачанная в процессе регулярного решения задач, поможет в любой работе.
Всё ещё сомневаетесь? Просто попробуйте решить первую задачу сегодня.
Где Решать Задачи По Программированию?
Когда я начал изучать программирование, долго не мог найти место, где можно попрактиковаться в решении задач. В процессе поисков наткнулся на сайт Киберфорум. Туда кто угодно мог выкладывать задачи, например, часто писали студенты, которые не могут решить лабораторки. Конечно обитали там и разработчики. Их было мало и обсуждали они более серьёзные вещи. На этом форуме я и засел на долгое время.
Прошло несколько лет, появились десятки специальных сайтов-тренажёров с задачками по программированию. Однако для новичков вопрос «где практиковаться» до сих пор остаётся открытым, судя по комментариям в моих соцсетях. Поэтому в этой статье я расскажу о 5 лучших сайтах с задачами по программированию на которых ты можешь наработать практику и закрепить теорию. Меня зовут Макс. Я один из авторов YouTube-канала PyLounge. Поехали!
Codewars –онлайн-тренажёр с задачами на различные темы. По моим наблюдениям, это одна из самых популярных в СНГ площадок подобного рода. Здесь можно отрабатывать синтаксис языка, взяться за решение алгоритмических задач или что-то продвинутое по типу шаблонов проектирования. Решать упражнения можно на любом из 60 языков программирования. Все задачи разделены на уровни: с 1 по 8 kyu. Чем ниже номер уровня задачи, тем она сложнее. Соответственно 8 kyu — самые легкие задачи, 1 kyu – самые тяжёлые. Твоё решение сразу проверяются встроенными тестами на сайте. Можно посмотреть или обсудить решения других пользователей. Среди участников есть таблица лидеров, где можно померяться своим kyu’eм. Из минусов – русский язык на сайте отсутствует. Так что придётся напрячь ваши знания «Ландан из э капитал оф инглишь» или пользоваться переводчиком.
Кстати, у нас на канале есть видео, где я решаю задачи с CodeWars на языке Python. Советую посмотреть, чтобы получше ознакомиться площадкой.
Фишка платформы в том, что на ней регулярно проводятся соревнования по программированию. Даже некоторые официальные олимпиады, по типу ICPC, идут на базе CodeForces.
Примерно раз в неделю (иногда чаще, иногда реже) проводятся 2-х часовые соревнования. Они называются «Rounds».
Предлагается несколько задач различной сложности. Решать можно в любом порядке, на любом доступном языке программирования. Сложность определяет сколько баллов вы получите за правильное решение. Проверка решений автоматическая. Для участия в раунде нужно заранее зарегистрироваться.
Каждый участник имеет «рейтинг» — число, которое показывает насколько хорошо он решает задачи на раундах. Если выступать хорошо – рейтинг растёт, плохо – падает.
В зависимости от рейтинга все участники делятся на 3 дивизиона. Раунды обычно и проводятся по этим дивизионам.
Есть специальные «Образовательные соревнования» (Educational Rounds) или «Взломы». Суть как в раундах, с одним отличием. Если вы правильно решили задачу, то можете смотреть решения других пользователей в течении 12 часов. Смотреть не просто так, а чтобы находить в них ошибки.
Если нашли и подтвердили тестом, получаете плюс баллы. Такие приколы проходят раз в несколько месяцев.
После каждого конкурса выкладывают разборы задач в блогах. Для развития собственных скилов полезно анализировать чужие решения. Ещё кстати есть обсуждения.
Иногда на сайте проводятся просто тематические олимпиады, например, первая командная пред-Хэллоуинская интернет-олимпиада.
Кроме того, доступен большой архив с задачами с соревнований, которые уже завершились.
Всё это затевается исключительно в целях обучения и саморазвития, поэтому никаких призов кроме баллов получить нельзя. Опыт и навыки – это самый ценный приз. А ещё их Telegram спонсирует. Пашок в ерунду вкладываться точно не будет.
Project Euler
Project Euler – сайт с коллекцией задач разной сложности. Задания представлены в виде задачек по математике, геометрии и информатике. Например, найти сумму всех чисел последовательности.
На сайте нет онлайн редактора кода. Решаете у себя на компьютере, а затем пишите ответ в форму на сайте.
Доступно 760 упражнений. После того как дан ответ, можно войти в ветку форума этой задачи и посмотреть, как её решили другие. Похожие испытания дают на некоторых собеседованиях. Так проверяют уровень алгоритмической подготовки программиста. Если ты хочешь этот уровень подтянуть, то милости просим на Project Euler. Но только на английском языке.