Тёмный

Mock-собеседование по алгоритмам от Team Lead из Яндекса 

it-interview
Подписаться 2,7 тыс.
Просмотров 112 тыс.
50% 1

Потренироваться проходить собеседования: clck.ru/3ASssc
Курсы по программированию: clck.ru/3ASt6y
Mock-собеседование от Team Lead из Яндекс алгоритмической секции на платформе it-interview.io. Потренируйтесь и вы проходить собеседования с разработчиками из ведущих компаний и получите подробный отзыв о том, на какую зарплату и грейд вы можете расчитывать, или над чем вам еще стоит поработать!
RU-vid канал Владимира: / @vladimir_balun_progra...
LinkedIn Владислава: / vladislav-berezovskiy-...
Таймкоды:
00:00 - Знакомство
00:07 - Обсуждение решения первой задачи
04:05 - Оценка сложности решения первой задачи
06:13 - Реализация решения первой задачи
12:17 - Тестирование решения первой задачи
17:08 - Обсуждение решения второй задачи
25:07- Оценка сложности решения второй задачи
26:54 - Реализация решения второй задачи
30:55 - Тестирование решения второй задачи
35:11 - Отзыв о собеседовании
[[ Отзыв о кандидате ]]
Рекомендовать этого человека на следующий этап? ДА
Каковы были его технические навыки? 4/5
Каковы были его способности решать проблемы? 5/5
Каковы были его коммуникативные способности? 5/5
За время собеседования решили две задачи Merge Intervals и Longest Substring Without Repeating Characters. Кандидат отлично умеет придумывать решения для задач, после чего неплохо реализует их (допускает немного багов, которые сам затем успешно находит). Код пишет чистый и понятный, с его языком знаком отлично (код писал быстро на языке Go - никаких трудностей не возникало). Оценивать сложность решения задач умеет, но не уверенно, так как допускает небольшие ошибки в оценках. Тестировать код умеет, но учитывает не все тест кейсы. По общению приятный, было комфортно общаться с кандидатом.
Merge Intervals - сразу задал вопрос на тему порядка интервалов, после моего ответа сразу сортировать интервалы по началу интервала (совпадающие начала интервалов решил игнорировать - сказал, что перемержатся при проходе). Рассказал про то, какой алгоритм сортировки будет использоваться. Учел случай, что интервалы с одинаковым концом и началом должны будут мержиться. На счет оценки сложности, сперва допустил ошибку и сказал, что сложность по времени будет O(n), но потом вспомнил про сортировку и оценил сложность по времени и памяти корректно. В ходе реализации предложил сразу добавлять в итоговый массив первый интервал (это упростило код). Достаточно быстро написал решение, но сдал по итогу с ошибкой. Предложил кандидату сгенерировать тест кейсы, которыми бы он тестировал свой код, но тест кейсами были покрыти не все базовые случаи (пришлось подсказать). После этого понял, что ошибка в коде будет связана с пустым слайсом интервалом, но нашел проблемное место в коде не с первого раза, но сам. По итогу, решение задачи заняло 19 минут, код получился чистый и лаконичный.
Longest Substring Without Repeating Characters - кандидат сразу предложил использовать плавающее окно для решения задачи, но сначала с неоптимальным поиском дубликатов в подстроке (затем сам рассказал, как можно улучшить это решение). На счет оценки сложности - корректно посчитал сложность по времени, но со сложностью по памяти запутался (сказал что O(n), но когда я ему рассказал про то, что алфавит ограничен, назвал корректную сложность). Перед реализацией не уточнил ничего про регистр символов, но уже время во реализации спросил про кодировки - действительно ли там будут только ASCII символы. Достаточно быстро написал решение, но сдал по итогу с ошибкой. Предложил кандидату сгенерировать тест кейсы, которыми бы он тестировал свой код. На сгенерированных тест кейсах нашел проблему и самостоятельно исправил ее, затем еще остались ошибки, оставленные по невнимательность, на которые я ему указал. По итогу, решение задачи заняло 22 минут, код получился чистый, но с одним лишним условием. Предложил кандидату упростить код - с этим он успешно справился. На дополнительный вопрос о том, какая будет максимально-возможная длина подстроки без дубликатов - ответил корректно.
Рекомендации для кандидата:
Я бы посоветовал уделить внимание тестированию кода, а именно подбору тест кейсов, которые будут покрывать большинство случаев того или иного решения (так как в первой задаче были покрыты не все базовые случаи). Также следует еще немного попрактиковаться с оценкой сложности тех или иных решений (так как в обеих задачах прослеживалась определенная неуверенность в ответах и небольшие ошибки в оценках). Ну и дополнительно не забывать уделять чуть больше времени требованиям к той или иной задаче перед тем, как переходить к ее реализации (кажется, что это позволило бы избежать ошибки в первой задаче).
#собеседование #mockсобеседование #leetcode #алгоритмы

Опубликовано:

 

7 июн 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 241   
@iamo0
@iamo0 Месяц назад
Досмотрел (предыдущий коммент писал посреди видео). Собеседующий хорошо видит что происходит, адекватно оценивает ситуацию, учитывает все детали и когда что-то для себя прояснил, готов двигать интервью вперед даже самостоятельно подсказывая соискателю. Очень круто и профессионально. Респект.
@user-tw5qq4cy6i
@user-tw5qq4cy6i 2 месяца назад
Сложность сортировки log(n)👍, отлично
@bbrother92
@bbrother92 2 месяца назад
а какая ?
@user-tw5qq4cy6i
@user-tw5qq4cy6i 2 месяца назад
@@bbrother92 n log(n), сортировка
@alexeysharyy8623
@alexeysharyy8623 2 месяца назад
@@bbrother92 теоретический максимум(доказывается при помощи дерева решений) в алгоритмах сортировки сравнением это Ω(n*log(n))
@bbrother92
@bbrother92 2 месяца назад
@@alexeysharyy8623 ну да log(n) это бинарный поиск. а для сортировки слишком революционно. А напомните кто так знатно ошибся?
@dmitrysapelnikov
@dmitrysapelnikov Месяц назад
Так ведь ещё и интервьюер знатно лажанулся, об этом не сказав в фидбеке.
@user-uv8ll6bl7t
@user-uv8ll6bl7t Месяц назад
Во 2й задаче можно уйти от for: в store хранить актуальные позиции встреченных символов и двигать левый указатель сразу на старый + 1, если символ уже встречался и его позиция > текущего левого. Позиции всегда обновляем
@mayboroda
@mayboroda 4 месяца назад
очень хорошо ведут интервью, никогда так не было у меня. обычно сидят молчат, а ты надрываешься )
@Skilljam
@Skilljam 2 месяца назад
Поэтому и похоже на подстановку)
@alexeypetrov8543
@alexeypetrov8543 Месяц назад
вот у меня с точностью все наоборот, наоборот подсказывают
@antoneltchaninov2246
@antoneltchaninov2246 15 дней назад
Мне сразу предлагали случай данных, который приведет к ошибке. Причём, писал на го, а собесила питонщица. Другой раз по стандартной библиотеке подсказали.
@neruinfo166
@neruinfo166 3 месяца назад
Если решал литкод, слегкостью повторишь решения) спасибо за контент, приятно смотреть в любом случае
@alexandreshmelev4170
@alexandreshmelev4170 4 месяца назад
Во второй задаче вместо счётчика наверно лучше хранить позицию символа в строке. Тогда левый указатель можно быстро перемещать на символ, следующий за повторившимся символом.
@vladimir_balun_programming
@vladimir_balun_programming 4 месяца назад
Да, это было бы более оптимально, но кандидат решил именно так
@ourdestruction6851
@ourdestruction6851 3 месяца назад
разве? допустим у нас строка abcadef, к примеру тогда встретив на третьем символе 'a' мы бы перенесли левый указатель сразу на d, таким образом не учтя самую длинную строку без повторений - bcadef если я конечно вас верно поняла, поправьте если нет
@alexandreshmelev4170
@alexandreshmelev4170 3 месяца назад
​@@ourdestruction6851Если так делать то зачем вообще хранить позицию встретившегося символа? Конечно же мы перемещаем левый указатель на 1 от позиции, сохранённой в таблице. Ну и надо не забыть обновить это значение, добавив туда позицию повторно встретившегося символа
@GeatMaximus
@GeatMaximus 3 месяца назад
a -> l,r = 0,0 ab -> r++ abc -> r++ abc "a" -> repeat -> l++ -> bc bca -> r++ bcad -> r++ bcade -> r++ bcadef -> r++ -> end(len(s)) -> return (r-l+1)
@dmitrysapelnikov
@dmitrysapelnikov Месяц назад
Главное при переносе не забыть взять максимум от текущего left, иначе можно ошибочно переместить его левее текущей позиции
@JohnDoe-qe5je
@JohnDoe-qe5je 3 месяца назад
А смысл от такого фидбека, какая польза? Это больше на придирки похоже мимо сути дела. Если это не монтаж/склейка, то человек решил две задачи за относительно небольшое время при том в относительно стрессовых условиях (на которые смело можно списать основные недочёты), без существенных ошибок. Как надо было решать ещё лучше? И за подобное собеседование ещё предлагается заплатить круглую сумму, в чём ценность?
@maksimmityagin7242
@maksimmityagin7242 3 месяца назад
Второе задание имеет либо некорректную формулировку, либо в результате, мы должны также обработать, как уникальные подстроки “bca” и “cab”) Да, длина будет также 3, но это не обязательно будет длина подстроки “abc” )
@user-nr3si2ky3h
@user-nr3si2ky3h 3 месяца назад
Это не живое интервью -) Провел как тим лид несколько сотен собеседований с лайвкодингом, люди не общаются подобным образом в стрессовой обстановке, слишком чистый и рафинированный диалог.
@maksimmityagin7242
@maksimmityagin7242 3 месяца назад
Тем более тогда можно было подумать над условиями задачи/формулировками)
@yaroslavlymar6599
@yaroslavlymar6599 Месяц назад
Я был на совсем другом собесе в Яндекс. Там были задачи Хард из литкода, где не базовые алгоритмы нужно писать.
@danilbanan406
@danilbanan406 4 месяца назад
Владимир красавчик,провел на высшем уровне
@nmg_prm
@nmg_prm 3 месяца назад
Здравствуйте Владимир давно смотрю Ваши каналы! Работаю на с++ уже 3 года, стараюсь совершенствоваться! Спасибо за мотивацию!
@romanarxxy
@romanarxxy Месяц назад
18:19, ну я бы не сказал что 2 ответа скорее, abc, bca, cab, abc, 4 ответа, получается, разве не так?
@user-ll2xw7tn6v
@user-ll2xw7tn6v 3 месяца назад
Вторую задачу можно решить за линейное время, если воспользоваться словарём на основе хэш-таблицы с поиском\добавлением за O(1). В словарь складывать последовательность уникальных символов и проверять каждый след. символ за О(1). Хз как работает store в go но вроде как я понял, то это не хэш.
@forgotten_forbidden
@forgotten_forbidden 3 месяца назад
так store здесь - это имя переменной типа map а поиск в map - O(1)
@tsttst3179
@tsttst3179 2 месяца назад
Вроде на собеседованиях в яндекс задачи сильно сложнее спрашивают. Или это не так?
@nnnabbot
@nnnabbot 3 месяца назад
Блин большое спасибо за видео. Очень понравилось. Впечатлило нахождение ошибки просто взглядом, я такого не видел еще. И вопрос , как прокачевается подрбный навык? Я понимаю что самый очевидный ответ - решай задачи 😂. Я имею ввиду может есть какая та ступенчитая система, от простых задач к сложным?
@designed6102
@designed6102 4 месяца назад
вторая задача это прям типовая задача из 24-ого задания егэ
@mayboroda
@mayboroda 4 месяца назад
а в Го-шке нет Set-а? ну или можно было массив булов заюзать во второй задаче. но то что код не запускали и "я вижу ошибку" - зачет )))
@Varkatel
@Varkatel 4 месяца назад
во второй задаче можно и константным массивом булов, и битами на инт32
@maxnov4120
@maxnov4120 3 месяца назад
@@Varkatelхоть кто-то написал про это)
@constantinegeist1854
@constantinegeist1854 3 месяца назад
Set'а нет, только мапа
@maximal5791
@maximal5791 3 месяца назад
Где такой метод slice.Sort ??? С ним НЕ работает. Нигде не могу найти. Заменил на sort.Slice - работает
@nikolaifedorov685
@nikolaifedorov685 3 месяца назад
Помню откликнулся на резюме из Яндекса. Созвонились с hr. Мне озвучили нужно знать алгоритмы. Я сразу сказал, что не знаю алгоритмы. Мне hr предложил подучить. Больше на вакансии от Яндекса я не откликаюсь
@happyzombie8588
@happyzombie8588 2 месяца назад
У меня так с Тинькофф было.) Позиция была на мидл ФТ, а потом hr пишет - "Ну, тут это у нас все фулл стак, прогать умеешь? Не? Ну тогда изучай, потом напишешь"
@OlegYemelyanov
@OlegYemelyanov 2 месяца назад
@@happyzombie8588что такое фт? Фитнес тренер?😅
@SaltyRain1
@SaltyRain1 Месяц назад
Ты подавался на вакансию разработчика/программиста без знания алгоритмов, и расстроился, что тебе сказали их подучить? А на что ты надеялся? Что на HTML будешь кодить?
@nikolaifedorov685
@nikolaifedorov685 Месяц назад
@@SaltyRain1 Я уже на тот момент имел опыт разработки 10 лет. Представь себе без знания алгоритмов. И естественно я не расстроился. Я теперь сам заканчиваю все собесы где меня начинают спрашивать знание алгоритмов. Тарам-парам-пам
@SaltyRain1
@SaltyRain1 Месяц назад
@@nikolaifedorov685 ну, вот я и спрашиваю, ты на HTML кодишь? Или «готовые библиотечки» для всего используешь, и понятия не имеешь, что там у тебя под капотом варится
@DubinArtur
@DubinArtur 3 месяца назад
В первой задаче надо проверять длину не на 0, а на
@mrt24739
@mrt24739 2 месяца назад
Можно, но не обязательно
@FuckAboutTransport
@FuckAboutTransport 3 месяца назад
Найм в ИТ конечно это цирк! Да давайте наймем кучу олимпиадников которые будут писать REST интеграции между АС, круд запросы, и тысячи юнит тестов. Браво, фиаско, плакать хочется.
@denisshkanduk6241
@denisshkanduk6241 3 месяца назад
или можно перестать мыслить крайнстями, иметь базовые навыки решения алгоритмических задач в 10 строк кода не равно быть олимпиадником
@sdramare864
@sdramare864 2 месяца назад
для прохождения собесов не нужно быть олимпиадником, для 99% заданий достаточно знать 5 алгоритмов/структур - sliding window, heap, hashmap, dynamic programming и BFS/DFS. Если ты не в состоянии разобраться даже в этом, то это просто skill issue, может надо подумать о другой профессии.
@MrRussianuser
@MrRussianuser 2 месяца назад
@@sdramare864я полагаю, что суть оригинального комментария в том, что у нас спрашивают проход дерева в ширину/глубину, алгоритмы динамического программирования, а потом мы выхожим на работу и перекладываем байтики с одной Кафки в другую (ну или в базу). В этом смысле, если проводить аналогию: найм в АйТи это когда у тебя спрашивают на собеседовании как сделать операцию на сердце, а потом на работе ты собакам лапки перебинтовываешь
@topnick4391
@topnick4391 2 месяца назад
​@@sdramare864xd
@user-qs5jr2jl2q
@user-qs5jr2jl2q 2 месяца назад
@@sdramare864small dick energy
@kOzae6bI4
@kOzae6bI4 Месяц назад
Забавно, но первую задачу вот как есть только что давали мне в мете на интервью в конце апреля
@thevirusnvgm2518
@thevirusnvgm2518 4 месяца назад
Первую задачу решил бы с использованием set, так как его в перспективе легче поддерживать, тем более что в коммерческом программировании, сложность алгоритма зависит от необходимости выполнения различных запросов, по типу добавить новый интервал, или вывести в каком интервале лежит число x и находится ли оно в этом интервале и т.д и set(или другая сбалансированная структура данных) подходит для этого лучше
@thevirusnvgm2518
@thevirusnvgm2518 4 месяца назад
Во второй задаче просто любая хэш таблица без повторений и ВСЁ
@user-pq8uw9br8o
@user-pq8uw9br8o 4 месяца назад
@@thevirusnvgm2518 скинь решение
@gzhegow
@gzhegow 3 месяца назад
Если я что-то и понял про коммерческое программирование - оно стремится написать микрофункции обрабатывающие единицу - сущность, агрегат и тд. Реальная программа и даже SQL работают с множествами. Всегда с множествами. И реальная оптимизация это разбить код на этапы, которые можно параллелить, а не написать черный ящик который сдвигами покажет минимум микросекунд. Потому что в этот ящик потом не влезть чтобы его распилить на два, ибо он совершенно нечитаем! Вопросов нет, он мегабыстр... Но вот на вход не одна строка а 100000 и микросекунды плюсуются. И делая множества всегда почти можно редюсом поделить число операций увидев одинаковость. А потом редюсом же раскопировать результаты обратно во множество. Вот где оптимизация. А это - это развлечение для мажоров.
@livemy
@livemy 3 месяца назад
Меня одного смущает что первая задача решена не верно? У него на выходе другие цифры чем в примере, т.е. попал интервал которого не было изначально, это 7
@Daniil_Chu
@Daniil_Chu 4 месяца назад
В первой задаче в условии ошибка, как выяснилось позже речь не о интервалах как написано в условии, а о отрезках, так как когда конец первого совпадает с началом второго считается что пересечение есть 🧐
@user-kp7qh4yb6m
@user-kp7qh4yb6m 4 месяца назад
Открой окно
@constantinegeist1854
@constantinegeist1854 3 месяца назад
Интервал с закрытым концом. Проблема в чём?
@arsenypogosov7206
@arsenypogosov7206 2 месяца назад
@@constantinegeist1854 В том что у интервалов концы не закрыты. Концыу закрыты у отрезков. Тоже смутило. Можно было использовать собирательное слово промежуток.
@constantinegeist1854
@constantinegeist1854 2 месяца назад
@@arsenypogosov7206 не знаю, зачем в русском языке понапридумали кучи терминов, если суть одна... в английском, если не ошибаюсь, всегда просто interval: open interval, closed interval, left-open interval, right-open interval а так, просто дрочь на терминологию, как по мне хотя да, может быть недопонимание
@arsenypogosov7206
@arsenypogosov7206 2 месяца назад
@@constantinegeist1854 в целом да, согласен с вами.
@muted9877
@muted9877 4 месяца назад
а когда уже собес с работником другого языка?
@wowxd9893
@wowxd9893 2 месяца назад
Тимлид краш 🔥🔥🔥
@iFATUM88
@iFATUM88 23 дня назад
Прикольное интервью, но хотелось бы понять: 1. На какой уровень это интервью 2. Такого рода задачи где то применяются на практике? Какие задачи решают?
@alexlightweight
@alexlightweight 3 месяца назад
Большей глупости чем спрашивать аглоритмы на собесе не существует. Это абсурд !!! Сам никогда их не спрашиваю у кандидатов, но по опыту наборов в другие отделы могу сказать следующее: после проверки алгоритмов вы набираете людей 2 типов 1) просто задрочивших литкод ради собесов 2) реальные задроты-токсики с ЧСВ. Потом мои коллеги тимлиды с соседних отделов ноют что у них в команде не те люди которые им видите ли нужны, а у меня нормальные адекватные ребята и дружная команда без алгосов и никаких проблем ... Выводы делайте сами. (работаю в одном очень крупном аутсорсере РФ)
@ChannelCheesecake
@ChannelCheesecake 3 месяца назад
Алгоритмы это способ большим популярным компаниям фильтрануть поток и сбить зп. Если работаешь в рандомной галере, как ты написал, зачем там алгоритмы спрашивать - загадка
@constantinegeist1854
@constantinegeist1854 3 месяца назад
​@@ChannelCheesecake вместо литкода лучше показать типичный ынтырпрайзный код, в который добавлен говнокод, и попросить поревьюить и порефакторить. Сразу видна куча вещей о кандидате. Задрачивание на литкод для 99% компаний/проектов мимо кассы
@ChannelCheesecake
@ChannelCheesecake 3 месяца назад
@@constantinegeist1854 да все бы запросто такое проходили. В рамках собеса ничего интересного не уместишь
@constantinegeist1854
@constantinegeist1854 3 месяца назад
@@ChannelCheesecake Мы такое практикуем и отшиваем большинство кандидатов, т.к. в упор не видят проблем в коде, или замечают только небольшую часть, или начинают сильно плавать, когда спрашиваешь, как сделать лучше. Задание простое может быть: напр., в контроллере напрямую запрос в БД, в коде явно присутствует состояние гонки (напр. пример с балансом на счету) и т.п. Спрашиваешь, где в коде проблема -- полбеды, затем спрашиваешь, как бы отрефакторил, и тут тоже многие начинают плавать. Плюс куча тем для беседы отсюда может быть ("окей, напрямую в БД лезть из контроллера если не хорошо, какой паттерн бы использовал?", или "окей, здесь состояние гонки, объясни почему? за уровни серилиазации БД пояснишь?" и т.п.) У нас кандидатов на "синьоров" с рынка было пока что единицы, кто смогли всё ответить приемлемо.
@romanchuk_vlog
@romanchuk_vlog 6 дней назад
Абсолютно согласен
@user-fb6wy6sq6o
@user-fb6wy6sq6o Месяц назад
Какие map? Вектора надо использовать во второй задаче. С этими map до 100 символов алфавита вектор быстрее будет тупо из за того, что проц хотя бы закешировать значения себе сможет. В map элементы памяти по разным адресам находятся. Это очень медленно.
@mrt24739
@mrt24739 2 месяца назад
В 1 задачке же вместо lastItem = max... должен быть merged =..?
@antonantonov2995
@antonantonov2995 27 дней назад
lastItem[1] = max(lastItem[1], intervals[i][1]) В логике кода все правильно. Это для расширения диапазона интервала Если у нас есть последовательность [[1,3],[2,8],[2,6]...] На первой итерации lastItem - [1,3], а intervals[i] - [2,8], и назначается "больший" конец lastItem[1] = max(3, 8) // диапазон lastItem становится [1,8] На следущей итерации lastItem - [1,8], а intervals[i] - [2,6] , и назначается "больший" конец lastItem[1] = max(8, 6) // диапазон lastItem остается [1,8]
@get_out_it
@get_out_it 4 месяца назад
для первой задачи time complexity задачи = сложности сортировки - это nlogn а не линейная как сказали на интервью
@undefined4992
@undefined4992 3 месяца назад
Он потом поправился
@warmrew9033
@warmrew9033 3 месяца назад
@@undefined4992 он потом сказал log(n) вместо n*log(n) что тоже неправильно, потому что в худшем у квиксорта будет O(n*n)
@TheCharlieGordon
@TheCharlieGordon 2 месяца назад
На что влияет это знание, если сортировки не избежать?
@undefined4992
@undefined4992 2 месяца назад
@@TheCharlieGordon на непосредственно оценку времени работы, это и есть финальный ответ на вопрос
@TheCharlieGordon
@TheCharlieGordon 2 месяца назад
@@undefined4992 а что даст эта оценка, если сортировка неизбежна? Типа, какая разница, сколько стоит товар, если ты в любом случае вынужден его купить? Т.е. как в этом случае поможет знание - O(n) или O (n*log(n))?
@iptashR
@iptashR 4 месяца назад
0:43. Was machst du?
@SuperEugeneone
@SuperEugeneone 4 месяца назад
Контент полезный. Только по первой задаче у сортировки временная сложность O(n log n), а не O(log n). Суммарная сложность для решения, соответственно, тоже O(n log n)
@vladimir_balun_programming
@vladimir_balun_programming 4 месяца назад
Да, действительно, видимо я не расслышал корректно в тот момент - сложность O(n log n)
@valeryzeryl9145
@valeryzeryl9145 4 месяца назад
​@@vladimir_balun_programmingа можете подсказать, почему вообще такая сложность? Есть 2 сценария: 1) сортируем массив (сложность n*log2n (быстрая, в среднем) + log n, поиск) 2) просто складываем все что видим, сложность n. Сортировки не требуется Итого, выгоднее тупо сложить массивы, если n>3
@user-ku4nn5pw8p
@user-ku4nn5pw8p 3 месяца назад
сложность О-большое - это наихудший сценарий. А 2ой пункт у вас - это наоборот наилучший сценарий@@valeryzeryl9145
@user-sw8fj8ik4z
@user-sw8fj8ik4z 3 месяца назад
​@@valeryzeryl9145могу ошибаться, но чисто интуитивно, если не отсортировать, придется сравнивать каждый последующий интервал со всеми уже объединенными, соответственно сложность до 0.5n^2 вырастает
@w01fer86
@w01fer86 3 месяца назад
@@valeryzeryl9145 как ты сложишь [[1,10], [20,30], [5,15]] корректно за один проход?
@dmit100
@dmit100 4 месяца назад
давай в слдщий раз что-нбдь, чего нет в neetcode roadmap, а то неинтересно даже
@Ser_UFL
@Ser_UFL 3 месяца назад
Во второй задаче при нахождении неуникального символа я бы ещё проверял длину отрезка от левого указателя до конца строки и сравнивал его с длиной текущей самой длинной строки. Условно: строка на 20 символов. Все символы были уникальны до 11го. Нам нет смысла дальше проверять
@user-eq7jg7os2b
@user-eq7jg7os2b 2 месяца назад
не верно. Например, строка s = abcdefaglm: первые 6 символов уникальны, потому встречается символ a, отбрасываем s[0] и теперь уникальная максимальная строка "bcdefaglm" длинною 9
@Ser_UFL
@Ser_UFL 2 месяца назад
@@user-eq7jg7os2b перечитай ещё раз, что я написал.
@Ser_UFL
@Ser_UFL 2 месяца назад
@@user-eq7jg7os2b ок, пример с 20 и 11 был неверен. Но проверка верна
@iamo0
@iamo0 Месяц назад
Собеседующий дает некоторые ответы соискателю. На самом деле это не хорошо и не плохо, можно если человек запутался подтолкнуть его и смотреть на блеск в глазах, все еще понимает он контекст или мы его потеряли. Но может быть и наоборот: кто-то пролезет на энтузиазме собеседующего. Но может быть этот энтузиазм происходит из того, что ребята друг друга знают.
@megauspexx
@megauspexx 3 месяца назад
По первой задаче
@Smurfetti
@Smurfetti 4 месяца назад
А на реальной АА какой вердикт бы был? И на какой Грейд?
@Kondratyevv
@Kondratyevv 3 месяца назад
Что такое АА? Батарейки?
@w01fer86
@w01fer86 3 месяца назад
@@Kondratyevv название секции в Яндексе, когда тебя собеседует опытный собеседующий (а не рандомный разраб, у которого это первое собеседование за полгода). Обычно оценки таких секций больше весят при принятии решения о найме и грейде.
@zazaorg3957
@zazaorg3957 3 месяца назад
@@w01fer86 это не задачи аа
@user-qs7ex4io1z
@user-qs7ex4io1z 3 месяца назад
Почему тимлиду из Яндекса дают задачки для студентов
@nihttoter3240
@nihttoter3240 Месяц назад
Я был фронтенд разрабом мне такие задачи давали тоже. Опыта во фронте 15 лет. Ни разу за 15 лет интервалы не мёржил. Я вообще не понимаю, зачем это нужно, что фронту, что тим лиду...
@megauspexx
@megauspexx 3 месяца назад
Быстрая сортировка сложность n*log(n), хотя собеседуемый сказал log(n)
@warmrew9033
@warmrew9033 3 месяца назад
O(n*n). А n*log(n) - только для среднего случая. А считают по худшему.
@denisshkanduk6241
@denisshkanduk6241 3 месяца назад
@@warmrew9033библеотечные сортировки (про которые и говорил собеседуемый) используют quicksort+heapsort это так называемый introsort он работает и вхудшем случае за nlogn
@tr3mendous24
@tr3mendous24 14 часов назад
Имхо, пройти собес от Яндекса можно лишь для того, чтобы потешить свое самолюбие, ну и просто прикольно. Я когда-нибудь обязательно это сделаю, когда будет время. Один раз ходил, решал весь собес одну задачку. Решил, но, очевидно, этого мало. Классические алгоритмы, опять же имхо, интересно решать как тренировку для ума
@OlegToropov-uj6jh
@OlegToropov-uj6jh 25 дней назад
Молодец хорошо держится! Красавчик!
@MRtheLAGERAT
@MRtheLAGERAT 4 месяца назад
Забавно, что именно эти задачки мне давали год назад на собесе в яндекс)
@Kondratyevv
@Kondratyevv 3 месяца назад
И че, ты попал в Яндекс?
@MRtheLAGERAT
@MRtheLAGERAT 3 месяца назад
@@Kondratyevv нет, завалился на одном из след. этапов(
@freestylerveevo
@freestylerveevo 3 месяца назад
​@@MRtheLAGERAT а че за след этап был?
@freestylerveevo
@freestylerveevo 3 месяца назад
​@@MRtheLAGERATи как попал на первый собес в яндекс? если можешь, поделись, пожалуйста
@MRtheLAGERAT
@MRtheLAGERAT 3 месяца назад
@@freestylerveevo на всех этапах дают 2 задачи, этапов хз сколько может быть, на стажировку вроде 3-4, читал, что на другие позиции вплоть до 9 таких этапов может быть Сам попал когда набирали людей на стажировку, сначал решаешь задачи типа codeforce на яндекс контесте, если прошёл, то назначают вот такие собесы.
@vp_arth
@vp_arth 3 месяца назад
А в go нет структуры множество(set)? На первый взгляд цикл сдвига l кажется лишним. Ситуация, которую он решает не может произойти.
@leonidfilippov9698
@leonidfilippov9698 Месяц назад
Есть map[string]struct{}, тот же фунционал
@vp_arth
@vp_arth Месяц назад
Не совсем, к словарю нужно велосипедить методы - пересечение, объединение множеств, вычитание и т.п. Для обеспечения уникальности подойдёт, да.
@young_flex3077
@young_flex3077 Месяц назад
16:35 ну все задачу с первой проходки не решил, в яндекс не берем
@TheCharlieGordon
@TheCharlieGordon 2 месяца назад
Т.е. в яндексе занимаются не интерпрайз программированием, а пишут алгоритмы? Ну-ну.
@spinacker16
@spinacker16 2 месяца назад
дали тимлиду два изяна... а мне хард впаяли с дп на 50 строк кода.
@FuckAboutTransport
@FuckAboutTransport 3 месяца назад
Как показывает практика, деловые качества у разработчика или тимлида это 90% остальные 10% это кодинг. Ищите людей умеющих общаться, искать решения в сложных ситуациях а не классных кодеров. Вы продолжаете нанимать того кто вам не нужен для того что вам не нужно.
@trashmylife7832
@trashmylife7832 2 месяца назад
И что тебе эти 10% накодят? 5 лет и потом переписывать? Если не раньше
@user-su5by2uj6q
@user-su5by2uj6q 2 месяца назад
у тим лида согласен. А разрабу зачем эти качества?
@trashmylife7832
@trashmylife7832 2 месяца назад
@@user-su5by2uj6q чтобы легаси плодить
@olegscherbakov5984
@olegscherbakov5984 Месяц назад
​@@trashmylife7832открою один секрет: программирование - это одно сплошное переписывание, особенно в энтерпрайзе.
@user-yd9xy3rb4x
@user-yd9xy3rb4x 26 дней назад
Я то думал там спрашивают какой то ужас, а там чет все слишком легкое
@lifewinsful
@lifewinsful 3 месяца назад
видно, что человек уже знал алгоритмы решения, просто вспоминал
@get_out_it
@get_out_it 4 месяца назад
Но ощущение конечно что чел знал какие задачи будут и паттерны
@undefined4992
@undefined4992 3 месяца назад
Эти задачи есть на литкоде, вполне вероятно, что он их уже решал
@animeai-content
@animeai-content 3 месяца назад
тут задачи достаточно простые
@ChannelCheesecake
@ChannelCheesecake 3 месяца назад
Это очень простые задачи, алё
@get_out_it
@get_out_it 3 месяца назад
@@ChannelCheesecake это ваше субъективное мнение
@ChannelCheesecake
@ChannelCheesecake 3 месяца назад
@@get_out_it это статистическое мнение, эти задачи сильно проще, чем те которые можно обычно увидеть
@Barrrash
@Barrrash 3 месяца назад
Провожу подобные интервью больше шести лет. Сугубо моё личное мнение... если оценивать работу интервьювера только по выложенному видео, то (на мой взгляд) отработал не выше середины. Конечно, так оценивать не совсем правильно, т. к. кандидат уже "разогрет" и находится в контексте происходящего (не задачь, но сомой процедуры). Из того, что сразу видно, независимо от контекста: + провёл дружелюбно ("безопасно" для кандидата) + уточнял "понятно ли задание" + провеёл по положительному пути + выявил недочёты, какие-то дал найти самому + обсудили основные тест кейсы + дал фидбэк + позволил задать вопросы - технические ошибки (в сложностях, что является основой задания, если судить по уделённому вниманию) - не обсудили альтернативные решения и использование средств платформы. - не выявлены способы принятия решений (как и сами принятые решения по допустимым входным данным, ошибка или пустое множество на выходе и пр.) - кандидату не показан потенциал для проф. роста (не вызван интерес) - не запрошен фидбэк на интервью от кандидата (возможно будет позже - на отдельном звонке). Моё мнение: интервьюверу стоит озаботиться изучением вопроса о дополнительных целях интервью. Основную задачу интервью (выявить техническое соответствие кандидата, запрашиваемой позиции) с натяжной выполнил. Есть и не менее важные дополнительные цели интервью.
@heuretic
@heuretic 3 месяца назад
Это стандартный формат 3-го этапа Яндекса, а больше в РФ таких интервью никто не проводят, если, конечно, цель - закрыть позицию, а не найти еще один винтик в систему или почесать свое ЧСВ. >кандидату не показан потенциал для проф. роста (не вызван интерес) Компанию на Я при найме не интересует твой опыт и знания за пределами Литкода (правда, есть еще архитектурная задача), в итоге разве что можно попросить з/п ближе к правому концу вилки. >не запрошен фидбэк на интервью от кандидата По окончании предлагается форма обратной связи. Можно там потыкать, что-то написать про проблемы. По-моему, результат идет в /dev/null.
@Barrrash
@Barrrash 3 месяца назад
@heuretic "а больше в РФ таких интервью никто не проводят, если, конечно, цель - закрыть позицию, а не найти еще один винтик в систему или почесать свое ЧСВ." Не уверен, что я правильно понял что Вы хотели сказать в этой части. На всякий случай поясню некоторые моменты. - Интервью с написанием кода в РФ проводит не только Яндекс. Как я уже написал - у нас такие интервью. Только у нас это второй (и как правило последний) этап. Он объединён с выявлением софт-скилов, общей технической беседой и подробным рассказом о процессах в компании или ответом на вопросы кандидата. Первый этап - короткий технический "скрининг" по телефону с целью принятия решения о втором этапе (в том числе кандидатом). - Что касается "почесать ЧСВ" на интервью - это самое плохое, что может делать интервьювер (таких - сразу в лес :)). - Про закрытие вакансии или поиск "винтика в систему". Как раз поиском винтиков (в том числе по довольно специфическим запросам) команды (в аджайл) и отдела (в матричной системе) я занимался. Написание и обсуждение кода отлично подходит для таких задач (конечно, только им не обойтись, о чём я и писал в оригинальном комменте). На моих интервью в том числе можно гуглить (как и в рабочем процессе). - Про "вызвать интерес": тут у Яндекса, конечно, особое положение - к ним многие уже за имя готовы идти. Для компаний без имени стоит задача заинтересовать кандидата. Одна из лучших мотиваций, как показывает моя практика - именно вызвать неподдельный интерес. Это даже деньгами не всегда перекупается. :) - За информацию о наличии фидбэка спасибо - моя догадка о том, что он собирается позже была верна.
@vladikvelikiy
@vladikvelikiy 3 месяца назад
​@@Barrrashчепуху какую-то написал, ЧСВ потешил своё очевидно
@antoneltchaninov2246
@antoneltchaninov2246 15 дней назад
У меня в Я было два литкод интервью с рандомными и одно с потенциальным тимлидом. Про процессы я спрашивал сам, человек от ответа ушёл, видимо, было лень обсуждать что-то после того, как уже решил, что не подхожу. Фидбек не спросил ни один.
@Barrrash
@Barrrash 15 дней назад
​@@antoneltchaninov2246Печально. Подобная лень портит впечатление о компании. Имхо, собес нужно в любом случае проводить до логической точки и отвечать - тоже, раз "разрешил" задавать вопросы :)
@Miclell
@Miclell Месяц назад
Как можно распинаться пол часа при решении столь лёгкой задачи то?
@user-zp7ty5yh7w
@user-zp7ty5yh7w Месяц назад
Вы идиот?
@UserSo4reUsu75ry
@UserSo4reUsu75ry 4 месяца назад
У меня бы 30 минут ушло бы на решение одной задачи. Надо больше решать ? Я уже больше года решаю задачи, но быстрее я их решать не стал.
@victorianking9042
@victorianking9042 4 месяца назад
надо перед собесом их всех заучить, а после оставить до следующего собеса.
@romanfomin8109
@romanfomin8109 3 месяца назад
А какие это задачи на литкоде? Чтоб самому порешать
@wowyomad
@wowyomad 3 месяца назад
Интервалы - 56 Самая длинная подстрока - 3
@Kelb90
@Kelb90 3 месяца назад
У первой задачи не линия по памяти, а константа, потому что пространственная сложность относится только к промежуточным данным. Странно, что интервьюер это не подметил. По сортировке скорее всего оговорился, потому что странно думать про лог(n)
@radiosh66
@radiosh66 3 месяца назад
Поделитесь плиз ссылочкой на источник, что память на результат не учитывается в пространственной сложности.
@Kelb90
@Kelb90 3 месяца назад
​@@radiosh66 Привет. Мы оцениваем алгоритм, а не среду с которой этот алгоритм взаимодействует для ввода/вывода, иначе минимальная пространственная сложность была бы линией всегда. Мы не используем массив для вычислений, поэтому учитываться в пространственной сложности он не будет. Можно почитать, например, в computational complexity Димитроу.
@radiosh66
@radiosh66 3 месяца назад
@Kelb90 спасибо за разъяснения, осталось на литкоде теперь всех переучить новому подходу к оценке пространственной сложности, т.к. на моей памяти во всех объяснениях учитывалась вся новая память, которую аллоцирует функция.
@pav28amur
@pav28amur 3 месяца назад
@@radiosh66 да, в литкоде может быть требование выполнять in-space, когда нельзя делать промежуточный массив и возвращать его. Тогда подход к решение сильно меняется.
@BoQbL1k
@BoQbL1k 4 дня назад
Что за задачи такие где оценить сложность задачи уже сложно )
@ihorvodko767
@ihorvodko767 Месяц назад
Проблема интервалов не полностью решена с точки зрения временной сложности. 1) Создайте вектор с размером = максимальному концу всех интервалов. 2) Перебрать входные интервалы и сохранить их в векторе: позиция вектора - это начало интервала, если интервал уже существует, объединить эти два интервала. 4) Взаимодействие с вектором для обработки интервалов в соответствии с логикой видео. Временная сложность равна O(n), n - количество введенных интервалов. (нет необходимости сортировать O(n*log(n))). Сортировка подсчетом выполняется за время O(n), что делает ее асимптотически быстрее, чем алгоритмы сортировки на основе сравнения, такие как быстрая сортировка. ================================================================================================= хорошее место для практики (не стесняйтесь поставить звезду :) ) github.com/IhorVodko/Hackerrank_solutions
@user-li6qv1mv7b
@user-li6qv1mv7b 3 месяца назад
По первой задаче не совсем понимаю почему сложность на этапе мержа интервалов оказалась O(N)? Остальные интервалы то тоже нужно учесть и смержить с остальными, а это уже возрастает до квадратичной зависимости - что огромная разница
@igorf243
@igorf243 3 месяца назад
для этого можно пройти по всему массиву всего один раз и выполнить по одной операции над каждым значеием из отрезка, в худшем случае будет O(2N) == O(N)
@user-li6qv1mv7b
@user-li6qv1mv7b 2 месяца назад
​@@igorf243 "Дан массив интервалов, объедините все пересекающиеся интервалы и верните массив непересекающихся" Ну? Имеется же в виду что у нас может быть несколько объединенных интервалов, которые нужно вернуть А вернуть мы сможем, когда совершим операции над всеми НЕобъединенными интервалами По итогу выполнение этой задачи - возвращается один только массив, с которым ищется возможные пересечения
@juhikoinb1403
@juhikoinb1403 2 месяца назад
@@user-li6qv1mv7bесли массив отсортирован, то нам надо просто проверять пересечение с предыдущим: пересекаются - объединяем, не пересекаются - отправляем на выход и начинаем собирать новый. Чистейший O(N).
@user-zi3er5oi5y
@user-zi3er5oi5y 2 месяца назад
Именно из-за таких собеседований я каждый раз отказываю рекрутерам яндекса
@HeczZots
@HeczZots Месяц назад
в цикле будет паника если в матрице пустые массивы без элементов
@alexandrcorbin1709
@alexandrcorbin1709 3 месяца назад
Очередное доказательство, что если повернуть стол и собеседующего превратить в собеседуемого, то он просто не пройдет собес, а завалить его на нем легче легкого).
@comparison9436
@comparison9436 Месяц назад
Чел идет на тим лида, использует сортировку и говорит скорость линейная🤦🏻 как их вообще рассматривают с такими знаниями?
@dimama1551
@dimama1551 Месяц назад
Наш брат головами таких в школе мел с доски вытирал
@user-yd9xy3rb4x
@user-yd9xy3rb4x 26 дней назад
Стопэ, вторая задача это по моему easy с leetcode
@noname-bi7ve
@noname-bi7ve 3 месяца назад
алгодрочеры не нужны
@wall-wrecker-my6ss
@wall-wrecker-my6ss 4 месяца назад
Да ладно ребят, там склейка на монтаже. Вы думаете чел просто сел и решил. Конечно нет. Может договорняк, ради контента
@user-pq3qd5zm6c
@user-pq3qd5zm6c 3 месяца назад
Ну хз. Это я решаю литкод 4 месяца. И сразу же решил эти задачи. Врядли постанова
@dieff_automation
@dieff_automation 3 месяца назад
​@@user-pq3qd5zm6cда там видно склейку. Если прям с нуля там минут 40 надо, если не гуглит, а с помощью gpt 4 версии, она решается за 3 минуты, лучшим алгоритмом, плюс все расписыаается.
@404Negative
@404Negative 3 месяца назад
задачи элементарные, что их решать. просто 2 простейшие свёртки и всё
@EsinaViwn9
@EsinaViwn9 3 месяца назад
​@@404Negative что значит свертка?
@constantinegeist1854
@constantinegeist1854 3 месяца назад
Легко решается
@defkill1erb
@defkill1erb 3 месяца назад
Как мы дожили до того чтобы писать код на интервью в блокноте с подсветкой синтаксиса языка ? 😮
@alekseifilippov9236
@alekseifilippov9236 2 месяца назад
В колледже информатики когда учил синтаксис писал на бумажке и сдавал преподу или мелом на доске, а потом уже пересаживались за компы
@wonderful2122
@wonderful2122 4 месяца назад
Обе задачи имеют средний уровень на leetcode.
@sb9185
@sb9185 4 месяца назад
Не изи)
@user-fh3wg8oj6q
@user-fh3wg8oj6q 4 месяца назад
Чет легенькие задачи
@get_out_it
@get_out_it 4 месяца назад
По поводу второй задачи. -забавно получилось что интервьюер упомянул что 26 букв алфавито. только в самом условии. неговорилось про буквыалфавита - написано символов, какие. символы могут быть - никто конечно не спросил
@ChannelCheesecake
@ChannelCheesecake 3 месяца назад
Какая разница
@get_out_it
@get_out_it 3 месяца назад
@@ChannelCheesecake большая разница, если ты не знаешь конечно множество символов то ты не можешь в решении зарезервировать массив на 26 символов к примеру
@ChannelCheesecake
@ChannelCheesecake 3 месяца назад
@@get_out_it во-первых интервьюер сказал, что там не только буквы, а ASCII, во-вторых делай Map и не думай над таким
@denisshkanduk6241
@denisshkanduk6241 3 месяца назад
@@get_out_itреч о резервировании не шла, символы подсчитываются в рантайме.char почти везеде 1 байт = 256 символов окей даже если мы подключим крутые библиотеки со всем возможными языками мира там не наберется и 2*10^9 а это обычный int. Что считается константой при размере входа стремящегося к бесконечности
@Boka-and-Joka
@Boka-and-Joka 3 месяца назад
все в яндексе и сам яндекс - дно поганое. как компания, так и люди в ней. да еще и куколды)
@alexlightweight
@alexlightweight 3 месяца назад
да, яндекс уже лет 10 как опустился, самое интересное что там ЗП чуть ниже средних по рынку, но все туда рвутся почему то, подозреваю просто хотят эту ачивку не более ... ))))))
@user-sc9hv7vy4z
@user-sc9hv7vy4z 3 месяца назад
Очень простые задачи.
@w01fer86
@w01fer86 3 месяца назад
Ты не поверишь, сколько кандидатов надо перебрать прежде, чем найдёшь кого-то, кто их решит
@D-gw4vj
@D-gw4vj 3 месяца назад
@@w01fer86 вау найти того, кто может решать задачи, но потом двигать и красить кнопку.
@nicholasspezza9449
@nicholasspezza9449 4 месяца назад
Чот Баламут постарел, в яндексе из него все соки выжимают. Возвращайся в Озон!
@vladimir_balun_programming
@vladimir_balun_programming 4 месяца назад
Побриться, подстричься и как новенький!
@artemkas4191
@artemkas4191 4 месяца назад
Реально чот похудел вообще
@user-mn2zo4tx8n
@user-mn2zo4tx8n 4 месяца назад
озон овно еще хуже
@ourtube5191
@ourtube5191 3 месяца назад
Он просто тренеруетсч
@ChannelCheesecake
@ChannelCheesecake 3 месяца назад
Глаза пустые
@JohnCena-lv3ew
@JohnCena-lv3ew 3 месяца назад
Хахаха. Порекомендуем тим лиду яндекса (если он данные задачи видел первый раз и это все не "актерская игра") больше сидеть на литкоде. Если таки он видел это первый раз, то непонятно как в яндексе обычные люди становятся (давайте только не будем уподобляться самому яндексу, и скажет что обычные люди с точки зрения данных алгоритмических задач) тим лидами. Потому что, то, что видел и в чем участвовал я не было таким простым. видимо рядята любят тащить себе в команды не кого-то с "улицы", а своего проверенного, а остальных валят. неприятное впечатление от яндекса.
@ChannelCheesecake
@ChannelCheesecake 3 месяца назад
А тебе какие задачи дали? Ну эти оч простые, мб с наймом беда сейчас
@user-je8yv6gq7o
@user-je8yv6gq7o Месяц назад
Это нумерология какая то что ли? Или астрология?
@stepandemin5836
@stepandemin5836 3 месяца назад
100% постановка. Вам, ребята в театральный надо ;)
@dailys7391
@dailys7391 4 месяца назад
Чет туго пошло у парня
@dibehemoth401
@dibehemoth401 4 месяца назад
Нифига се туго 2 медиум за 37 минут...
@sb9185
@sb9185 4 месяца назад
​​@@dibehemoth401Так это изи уровень
@dibehemoth401
@dibehemoth401 4 месяца назад
@sb9185 это обе медиум литкод. Хз как в яндексе внутри считают, конечно.
@sb9185
@sb9185 4 месяца назад
646?@@dibehemoth401
@get_out_it
@get_out_it 4 месяца назад
ну и видно что чел готовился и решал уже эти задачи потому что. сходу для первой задачи определил что нужно сортировать, для второй задачи сходу вопсользовался паттерном скользящего окна.
@brainrainz
@brainrainz 4 месяца назад
слабенько, хотя бы 1 medium бы дали
@get_out_it
@get_out_it 4 месяца назад
это медиум на литкоде
@endaksi_channel
@endaksi_channel 3 месяца назад
void task1() { var initial = List.of(new StartEnd(3, 5), new StartEnd(4, 6), new StartEnd(7, 8), new StartEnd(1, 2)); var reduced = initial.stream() .sorted(Comparator.comparing(StartEnd::start)) .reduce( new ArrayList(), (partial, next) -> { if (!partial.isEmpty()) { var indexOfLast = partial.size() - 1; var last = partial.get(indexOfLast); if (last.overlaps(next)) { partial.set(indexOfLast, StartEnd.merge(last, next)); return partial; } } partial.add(next); return partial; }, (first, second) -> first); System.out.println(reduced); } record StartEnd(int start, int end) { boolean overlaps(StartEnd other) { return start
@gzhegow
@gzhegow 3 месяца назад
Стримы это очень круто. Стримы это хорошо забытое прошлое и счастливое будущее.
@vp_arth
@vp_arth 3 месяца назад
s/second.end/Math.max(first.end, second.end)/
Далее