Хочу рассказать вам историю о том, как я начинал с уровня — «не могу решить даже 1 easy задачу из 10» до уровня — «могу решить каждую вторую medium задачу» и прошел несколько coding сессий в таких компаниях как Meta, Booking, Careem, Avito...
Статистика с leetcode на дату 12.01.2024
Началось все с того, что в конце 2022 года я твердо решил, что хочу устроиться в FAANG компанию, но для этого, как вы наверно все знаете, нужны знания алгоритмов и структур данных, коих у меня не было, потому что в обычной работе тебе не нужны heap, tree, disjoint set и другие структуры данных, поэтому начать пришлось практически с нуля.
Было очень тяжело, т.к. не знал с чего начинать, по какому принципу решать задачи, что важно, а что не очень, сколько нужно решить задач, чтоб чувствовать уверенность, получится ли вообще перейти на medium задачи, т.к. решение даже easy задач заводило в тупик, ниже постараюсь ответить на все эти вопросы.
Самое первое, что приходит в голову, когда хочешь начать решать задачи на литкоде — это открыть страницу с задачами https://leetcode.com/problemset/all/ и начать решать их подряд, но это не очень хорошая идея, даже если вы применили фильтр easy, потому что очень много задач с пометкой easy очень сложно решить и это может сильно демотивировать, а то и понизить самооценку.
FAQ:
leetcode rewind за 2023 год
Статистика с leetcode на дату 12.01.2024
Началось все с того, что в конце 2022 года я твердо решил, что хочу устроиться в FAANG компанию, но для этого, как вы наверно все знаете, нужны знания алгоритмов и структур данных, коих у меня не было, потому что в обычной работе тебе не нужны heap, tree, disjoint set и другие структуры данных, поэтому начать пришлось практически с нуля.
Было очень тяжело, т.к. не знал с чего начинать, по какому принципу решать задачи, что важно, а что не очень, сколько нужно решить задач, чтоб чувствовать уверенность, получится ли вообще перейти на medium задачи, т.к. решение даже easy задач заводило в тупик, ниже постараюсь ответить на все эти вопросы.
Самое первое, что приходит в голову, когда хочешь начать решать задачи на литкоде — это открыть страницу с задачами https://leetcode.com/problemset/all/ и начать решать их подряд, но это не очень хорошая идея, даже если вы применили фильтр easy, потому что очень много задач с пометкой easy очень сложно решить и это может сильно демотивировать, а то и понизить самооценку.
- Первый совет - обращайте внимание на процент Acceptance, чем этот процент больше, тем лучше, потому что это означает, что у многих людей получается решить эту задачу и есть вероятность, что и у вас получится.
- Второй совет - начинайте с самых фундаментальных структур данных, таких как array(одномерный/двумерный), set, hashmap, они будут встречаться вам постоянно, к примеру, во многих задачах время выполнение можно улучшить добавив set или hashmap(но нужно учесть, что увеличится потребление памяти) и только после того как освоите их, можно начинать углубляться в другие структуры как stack, queue, linked list, tree, graphs
https://neetcode.io/roadmap - тут есть roadmap с темами и задачами, очень советую
https://www.techinterviewhandbook.org/grind75 - можно создать понедельный план с применением различных фильтров
https://seanprashad.com/leetcode-patterns/ - список из 150 популярных задач, разделенные на темы, сложность и компании - Третий совет - если не можете придумать оптимальное решение, начинайте с решения "в лоб", как только получится, подумайте над тем, как это решение можно улучшить, может можно использовать какую-то структуру? может массив можно отсортировать? а что если использовать set или hashmap? можно или использовать какой-то шаблон
- Четвертый совет - пройдитесь по этим 14 шаблонам https://hackernoon.com/14-patterns-to-ace-any-coding-interview-question-c5bb3357f6ed , особенно уделите внимание two pointers, sliding window и fast & slow pointers, т.к. они чаще всего встречаются
- Пятый и самый важный совет - практика, практика и еще раз практика, в начале мне хотелось каждый раз плакать от своей тупости, потому что не мог решать даже простые задачи и это не преувеличение, фраза - "какой же я тупой" не уходила из головые первые несколько месяцев
FAQ:
- Что делать, если не получается решить задачу?
Если после 30-40 минут у вас не получилось решить задачу, то посмотрите решение, попробуйте найти видео решение этой задачи, как только посмотрели и разобрали, попробуйте решить заново, если не получилось, еще раз посмотрите и так по кругу. Время от времени возвращайтесь к старым задачам и решайте их заново, особенно если решение какой-то задачи далось вам с трудом.
Я порой одну и ту же задачу решал по 10-15 раз, а то и больше - Сколько задач нужно решить, чтобы начать откликаться на вакансии?
Тут все индивидуально, я полгода каждый день решал(сам или с помощью видео) несколько задач, решил где-то 300 задач и только в этот момент почувствовал почву под ногами, а уверенность почувствовал только после решение где-то 400-500 задач. Некоторым достаточно и 100-200 задач, к сожалению я не из их числа. - Какой язык программирования выбрать для решения задач?
Если коротко - Python.
Я начинал решать на php, потом перешел на go, после начал решать на java и наконец после просмотра видео
Java - тратишь время на большие конструкции, к примеру - List<Integer> items = new ArrayList<>();
PHP - путался в аргументах функций, неудобно было в целом писать, хотя практически все время пишу на этом языке
Go - мало встроенных функций, даже min/max, теперь уже есть, но тогда не было, также нужно конвертировать int в float и обратно, тратишь лишнее время, хотя код и предсказуемый
Python - лаконичный код, много встроенных функций, которые помогают решать задачи(Counter, defaultdict, divmod, lambda и т.д.), время тратишь именно на решение задачи, а не на печатания и прочее, скорость на собеседовании очень важна. - Как найти время на задачи?
В моем случае я старался решать по 2 задачи в день, одну задачу до начала работы и вторую задачу после работы. На выходных уделял больше времени, смотрел видео, читал статьи, старался решать больше задач, также старался повторно решать старые задачи, чтобы закрепить тему и задачу. - Нужно ли покупать leetcode premium?
Самое полезное у premium - вы можете посмотреть в каких компаниях давали ту или иную задачу, если вы готовитесь к конкретной компании, то рекомендую, иначе достаточно бесплатной версии, т.к. видео объяснение задачи можно найти на канале Neetcode(ссылка ниже) и т.д. - Стоит ли покупать доступ к educative.io?
Очень много видел рекомендаций курса Grokking Coding Interview Patterns от educative, но не нашел этот курс очень полезным, единственное понравилось визуальное объяснение, но на мой взгляд лучше посмотреть видео на ютуб - Стоит ли покупать доступ к algoexpert.io?
На мой взгляд очень полезный ресурс, для каждой задачи есть подробное объяснение, чуть ли не каждое видео по 30-50 минут. На сайте постоянно проходят разные акции и можно ухватить все курсы на год за 99$, адекватная цена, приятный сайт, много тест кейсов для задач и сам редактор приятный и удобный
leetcode rewind за 2023 год
Сказ о том, как я за год решил более 600 leetcode задач
Всем салют! Хочу рассказать вам историю о том, как я начинал с уровня — «не могу решить даже 1 easy задачу из 10» до уровня — «могу решить каждую вторую medium задачу» и прошел...
habr.com