Первые 255 задач на «‎литкоде»‎

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Были годные статьи об аргументированной пользе алгоритмов (например, habr.com/ru/company/geekfactor/blog/597035), тут хочется поделиться личным опытом.

На всякий случай, не стоить переоценивать пользу алгоритмов: если вы на одном уровне зп и при этом коллега крутил на всем подряд биг О нотэйшн, скорее всего софт скилы у него развиты лучше.

Что дано: фронтэнд с элементами nodejs разработки. Знаю javascript, взял java из-за общего префикса и Брюса Эккеля. Язык годный, легко читать, осознал что надо оч много писать после 175 задачек на ресурсе под именем leetcode. Попробовал язык мобилок, язык прекрасный, но не для мобилок. Swift прекрасен и будет еще прекраснее в будущем. До наступления прекрасного будущего решил юзать питон: легко и мало писать, но трудно читать — да и пофиг, так как каждый день новая задачка.

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

Недостижимая цель (она же мотивация) — заработать баллов на майку leetcode (5000, по-моему). За решение задачки дня дают 10 монеток. Идея как в казино, покрываем сектор. В месяц на наш сектор делает 50 монет (и будет больше). Профит. Верхняя граница сектора на данный момент — это трехсотая задача.

Что пропущено? 1) платные задачи — зарядку проводим дома без похода в зал; 2) задачки на которые можно решить только на bash — кажется, на питон уже пора все переписать; 3) четыре красные задачки.

Задачки на leetcode бывает трех видов: зеленая, желтая и красная. Отличие красной от желто/зеленых в кол-ве логических шагов и тестов c большими данными (и тут bigdata :) (или, другими словами, красные алгоритмы должны работать оч быстро). Бывали красные задачки что-то вроде проекта — вроде и не сложно, но пишешь и пишешь, прям оч много кода. Если сравнить: желтая задачка на день, красная может легко затянуть на два (в редких случаях на неделю).

Процесс решения задачки обычно включает след шаги: 1) как это вообще можно решить 2) ага, а если мы в середине функции, что пришло на вход и что нужно вернуть. Тут хочется добавить, что мозг вообще сложно заставить решить задачу здесь и сейчас, скорее загрузить инфу утром, и к вечеру, возможно, появятся идеи. По-моему, большинство задач можно решить с помощью рекурсии и самой неоптимальной динамики, хотя если повезло найти быстрое решение без динамики — прям кайф.

Много задач на бинарный поиск, обход деревьев и списков. Задачки на строки, массивы, двойные массивы. Палиндромы (куда без них), скобки, калькуляторы (они же парсеры). Было с десяток задач на SQL (по-моему все можно решить с помощью window function). Были задачи с историей (прям кайф) которые обычно красные и кажутся на первый взгляд очень проходными. Много связанных задач.

В какой-то момент задачку оч хочется закрыть (выполнить), а вот тесты не проходят. То есть тесты на качество проходят (порядка 200 штук), а на кол-во (с большими входными данными) — нет. Алгоритм переиспользуeт компоненты связанных задачек, на бумаге выглядит чудесно, а тесты все никак. Погрешность теста в 0.3 % — пропущен какой-то локальный минимум (тут я честно позавидовал ребятам из ml). Возникает этическая проблема: харкодить или не харкодить тесты? С одной стороны, оч хочется закрыть задачку и пойти спать (что весьма неплохая идея). C другой, и думается мне, это весьма правильное решение — не харкодить, оставить задачку в нерешенных и вернуться к ней потом.

Немного статистики: решив первые 255 задачек, по версии leetcode вы будете лучше, чем 90% пользователей на желтых и красных задачках и на 84% по зеленым задачкам. Кол-во монеток приблизительно 950, рейтинг (или ранк) 146250 (есть куда плыть). Как-то так. Удачи в кодинге :)
Источник: https://habr.com/ru/post/658573/


Интересные статьи

Интересные статьи

Serverless подход в разработке уже давно пользуется большой популярностью. По разным опросам, разработчики отмечают следующие преимущества в serverless технологиях: гибкое масштабирование, быстрота ра...
30 октября прошло первое занятие Сколковской Школы Синтеза Цифровых Схем. Из-за Ковида его пришлось провести в онлайн-формате. Трансляция первого занятия.Возможно онлайн-формат - это и к лучшему, так ...
Я живу в Ташкенте, и когда учился в университете — начал учить Python, чтобы писать ботов. Боты — это узбекский хлеб, у нас на них построено вообще все. Например, никто н...
В задаче о надстроке по входному набору строк требуется найти кратчайшую строку, которая содержит каждую из них в качестве подстроки. Данная задача возникает в разных приложениях, наприме...
Этот пост будет из серии, об инструментах безопасности, которые доступны в Битриксе сразу «из коробки». Перечислю их все, скажу какой инструмент в какой редакции Битрикса доступен, кратко и не очень р...