tgoop.com/dev_easy_notes/491
Last Update:
Смотрите, я провожу алгособесы, сам от них не в восторге. Проходить алгоритмическую секцию так же приятно, как поплавать в реке с камнем, привязанным к ноге. Однако учитывая ситуацию на рынке, при собесе в Big Tech вы с очень большой вероятностью нарвётесь на эту секцию.
Часто разработчики, которые никогда этим не интересовались, сразу впадают в ступор и не знают даже, как подступиться к easy-задаче. Я прям это на практике наблюдаю – там каждый второй начинает плыть.
При этом почти у каждой алгозадачи есть шаблон, применив который, вы, если и не решите задачу сразу, то хотя бы значительно продвинетесь в решении.
Вот парочка самых простых шаблонов:
Два указателя – часто задача просто решается, если идти не одним указателем по списку от начала до конца, а двумя. Движение у них может быть разное: один идёт с начала, а второй – с конца; один идёт по элементам, а второй – через элемент; или же они двигаются независимо по определённому условию. Пример задачи.
Скользящее окно – по сути, продолжение идеи двух указателей, только используется в случае, когда нужно получить какой-то подмассив с определённым свойством: например, чтобы была заданная сумма или количество уникальных элементов. Пример задачи.
Поиск в глубину / ширину – делал про это пост, там всё не так сложно, как кажется. Пример задачи.
Backtracking – вот это уже более хардовый шаблон. Полностью его тут не раскрою, но хотя бы по верхам, а дальше сами загуглите.
Смысл в том, чтобы перебрать все возможные варианты через рекурсию – но не в тупую, а по шагам: добавляем элемент в коллекцию, затем рекурсивно вызываем сами себя и в процессе проверяем – если текущее решение невалидно, откатываемся назад.
Понимаю, выглядит как дичь, но если хотите прям проникнуться, то попробуйте решить вот эту задачу – или хотя бы посмотрите её решение.
BY Dev Easy Notes
Share with your friend now:
tgoop.com/dev_easy_notes/491