Очень круто, прям на одном дыхании смотрел. Классно, что показали как на стороне яндекса всё делается. Заметки огонь просто. Спасибо всем участникам и Кириллу за организацию.
Сказали что нужно решить задачу максимально оптимально и по времени и по памяти. В то же время пишет коммент "Кандидат откуда-то взял идею, что нужно делать in-place:)"! Отличный подход, яндекс!
@@dmitriykonopinskiy3793 если вы не знаете значение данных слов + не умеете пользоваться переводчиком, думаю, вам не стоит вообще пытаться в программирование
@@AndroidBroadcast ой да перестаньте, мы все продаем свое время работодателю. И абсолютно нормально ценить себя и свой труд максимально высоко. А для души есть пет проекты ) Да и статус... Ну может быть в этом что то есть, но я выбрал в свое время нормальный оклад. И ни капли не жалею ) Но какгрицца, это сугубо личный кейс, ни в коем разе не настаиваю на мнении...
@@AndroidBroadcastтак а с чего ты взял, что ты бы без яндекса их не получил? Куча людей сидят на очень жирных офферах, но яндекса в резюме не имеет. Так и помимо прочего полно других статусных российских бигтех компаний, которые имеют адекватный процесс найма и платят больше. А несколько недель/месяцев решать литкод для собеса, чтобы потом быть гребцом за зп ниже рынка, но в яндексе, кажется такой себе идеей.
Тут скорее тема, что у фаангов подход похожий (только поадекватней), так что можно использовать Яндекс как бесплатное мок-собеседование при подготовке сразу в фаанг)
На мой взгляд, большинство разрабов с большим опытом коммерческой разработки, но без олимпиадного бекграунда, не будут тратить время на leetcode задачки. Зачем ? Есть компании в России, которые платят не меньше или больше yandex, но на их собесах не спрашивают оторванные от реальной жизни задачки. Конечно, такие задачки используются при найме в FAANG, но там люди готовятся по полгода именно из-за 'жирных' офферов. А yandex, судя по всему, принимает в основном молодежь из бывших олимпиадников )
Я как миддл разработчик в крупной компании иногда не сходу въезжаю как решать литкодовские задачки даже легкого уровня, но тем не менее трудностей в работе не возникает.
а вы что не пользуетесь их ПО? попробуйте и поймете в чем прикол..🤣 я когда пользуюсь их ПО, икают все, даже те кто еще только собирается туда пойти.🤣знать алгоритмы конечно надо, но надо еще уметь правильно писать! не зная на хорошем уровне языка на котором пишешь, от алгоритмов толку что мертвому припарка..🤣 у них алгоритмы просто отсеивают людей. туда не берут лучших или худших, берут кто пройдет! а чтоб не перли все подряд, сделали это как важное. так делали во всех топ компаниях чтоб отсеять как можно больше, ну а если прошел то ок, придется взять..🤣 какой-то прям пользы, нет... я смотрю их собесы, да часто код верно написан но проблему которая потом догонит он не решает.. и тогда вопрос нафига?🤣алгоритмы писать может, а язык нормально не понимает, и лепит так что оптимизация алгоритмом тащится а языком гробиться. а потом посмотрели медленно пашет, переписали на более быстрый яп..🤣 вместо того чтоб просто нормально написать.
Про необходимость задач на алгоритмы. Можно было не лукавить, а сказать честно. Подбор в яндексе - это конвейер, а собеседования - фильтр. Выставили фильтр на задрот литкода. Если его не пройдет отличный программист, то у него за спиной стоит еще пять таких же. Пока народ идет в Яндекс, так и будет.
@@user-dt9tb2rm7lничего не мешает порешать задачи, но при выборе кандидата это ключевой показатель, который +- ничего не значит, я собесил людей у которых 5+ лет опыта в Я, может мне конечно попадались "интеллектуалы" которые 2 слова не смогли связать, но это дно полное. Вывод: алгоритмы +- нужны но это не ключевой показатель при выборе кандидата.
Когда у тебя 100 людей на одну вакансию то лучше их быстро отфильтровать и набрать математиков чем искать мифических "хороших программистов" которые не умеют решать алгоритмические задачи.
@@zxcq откуда следует, что именно это "лучше"? И не нужно подменять условия, не "не умеют решать алгоритмические задачи", а "не укладываются в 30 минут, 10 из которых потрачено на общение с интервьюером для выяснения всех требований"
Это звучит здорово, пока случайно не заходишь на Яндекс маркет. Это не то что на телефоне еле работает, так и на компьютере с большим трудом. Казалось бы, заявляется всё для оптимизации, но на выходе не сильно отличается, а местами и хуже чем в среднем по больнице
@@torburgmaxредкость конечно. Я как-то по приколу подался на самую простейшую вакансию Яндекса, чтобы посмотреть, реально ли туда попасть. Вакансия была как раз в подразделение маркета. Заниматься подготовкой и модерацией карточек товаров. Выслали тестовое задание. Сделал. Задание кстати муторное из нескольких частей. Но даже на собеседование не пригласили. И это вакансия была на полный рабочий день за что-то там 25 или 28 тыс. в месяц. Не знаю, что не устроило и каких гениев они на эти деньги ищут. Я может и не лучший специалист в мире, но уж точно не худший. Хотел бы я посмотреть на то, кого они находят на такие зарплаты.
42:37 -- я считаю, что некорректно считать, что сложность по памяти оценена некорректно. Мы же выделяем память под выходной массив. И чем больше первый, тем больше второй, Таким образом, потребление памяти растет линейно. Другое дело, что зачастую это учитывать необязательно, и на практике лучше спрашивать, учитывать ли выходной массив в оценке. Но ответ абсолютно корректен (если я заблуждаюсь, то объясните, пожалуйста, почему)
Это холиварный вопрос. Прочитав на stack exchange вопрос под номером 83586 можно получить ответ почему именно. На собеседованиях я специально уточняю, что меня интересует именно дополнительная память, потребляемая алгоритмом, а не какая-то абстрактная память, чтобы не было двусмысленности. На этом собеседовании я сделал так же :)
@@AntonRychagov Почему в этом случае память ты называешь абстрактной? Сколько ни думаю, получается, что на выходе мы возвращаем дополнительный массив, занимающий столько же памяти, сколько и исходные данные. Если исходный массив занимает 1ГБ, а у нас памяти 1.5 ГБ, то на выполнение алгоритма не хватит памяти. Потому что память не абстрактная , а вполне себе реальная. И дополнительная. Не получилось найти обсуждение по номеру. Нет ли у тебя возможности прислать ссылку или что-нибудь еще?
@@KlGleb говорить просто "Оцени потребляемую алгоритмом память" - говорить про какую-то абстрактную память. Это может быть как аллоцируемая дополнительная память, необходимая для корректно работы алгоритма, так и вся память (то бишь плюс входные и выходные данные). По этой причине я и говорю про конкретную память - мне нужна оценка именно дополнительной памяти, потребляемой алгоритмом.
@@AntonRychagov Но ведь эта память выделяется на конкретной строчке алгоритма, и она нужна для работы алгоритма (иначе пришлось бы "грязно модифицировать исходный массив"). То есть эта память в данном случае нужна для конкретно работы алгоритма, разве не так?
@@KlGleb это выход алгоритма, то бишь не попадают под определение дополнительной памяти. Ссылку youtube, к сожалению, режет :( Так что могу посоветовать только скопировать ссылку на любой ответ в stack exchange и подменить номер :)
Заметил зависимость, чем больше алгоритмистов работает над проектом тем больше это неюзабельное г-но. Вот взять бы хоть фаанги, ну постоянно что-то падает, релизы с кучей багов и т.д. могу частично согласиться, что есть еще проблема больших команд, но это уже проблемы менеджмента. Работал с парнем, который был очень крутой андроидщик и даже в Тинькофф успел поработать, так вот его на алгоритмах в фб срезали, на задачке по графам. Я к чему это, к тому что вот он точно делает лучше чем эти калеки из фб, но время потраченное на андроид они потратили на литкод в итоге пишут не андроид, а литкод...
прямо в точку сказано про андроид и литкод. кроме алгоритмов есть еще сам яп на котором пишешь и еще гора всего.. если ты не понимаешь где какой цикл лучше или вообще итератор, а может и рекурсия, алгоритмы не помогут писать хорошо, лишь усложнят это все.. аналогично и с паттернами.. открываешь а там куча паттернов, алгоритмов, а сам код такое говно откровенное..🤣
Сложность по памяти оценивается для вспомогательных данных, а не для выходных. Иначе бы сложность зависела от сигнатуры функции (возвращает ли она массив или в нее передается уже преаллоциорованный выходной массив)
Яндекс парадоксален, дофига собесов, кажется что туда проходят одни из лучших, а итог - вечные утечки данных, почти все приложения лагучее говно, где не только кадры видно даже на флагманах, но и куча всяких тупых багов, сервис хороший а приложением через силу пользуешься, даже яндекс карты - хорошая либа, видно что все же нормальные разрабы приложили руку, но почему она блин такая жирная
Потому что к алгоритмическим секциям надо долго готовиться и постоянно поддерживать эти знания. В обычной то работе таких задач почти и нет ) А для подготовки и поддержки знаний нужно много свободного времени. А у кого оно есть - у молодых ребят, вчерашних выпускников. Ибо ни детей, ни пресловутой ипотеки )) Но вот когда дело доходит до реального продукта - там же в основном нужны другие навыки, банально опыт. И, как следствие, возникает то, что вы описали )
Яндекс - компания немного оторванная от реальности. Сталкивался с их спецами 3 раза и все три раза абсолютное разочарование. К тому же у них странное понятие о справедливости
Вообще не понял тезис о том что IDE развращает. И нужно писать код в блокноте. IDE это инструмент обязательный для разработчика. Я никогда нигде в жизни и в работе не писал код в блокноте и на листочке, разве что в универе. Давайте еще гвозди будем забивать рукой, молоток развращает. Да я не помню какие методы у List array и тд. но Studio мне подскажет, и я даже не задумываюсь об этом, я знаю что они есть и думаю над самой задачей а не парюсь над тем как называется тот или иной метод.
Задача была не сложная, но я очень хорошо понимаю соискателя, на стрессе в голове пустота. На мой взгляд он прошёл хорошо. Мне на собес в Яндекс попалась задача из раздела "Medium" литкода - и да, я не прошёл с первого раза))
Превьюшка к видео - огонь 🔥 Я даже успела подумать, что это Антон свой канал завёл) Великолепный собеседующий, мегапрофессионал, идеальный руководитель, человек признанный, авторитетный, мэтр 😃 Классный получился разбор секции!
В целом, там не очень сложная секция - изи + мидл с литкода в большинстве случаев. В случае с поисковиком, например, я понимаю зачем эти алгоритмы спрашивают, вот только зачем они в Яндекс Банке - хз, я в финтехе почти всю свою карьеру (около 7 лет), на одной руке пальцы останутся, чтобы посчитать, сколько раз мне понадобился какой-нибудь алгоритм, например нахождение значения n-го элемента в односвязном списке. Не могу понять, зачем это спрашивают в областях, в которых не нужны эти алгоритмы, а если и понадобились раз в год, то и посмотреть можно
А есть список задач с литкода? А то за сайтик по решению задач отдавать 160 баксов? Цена неадекватная. Там к тебе препода не приставляют. Ладно там пару баксов в месяц отдать. Но ценник для такого рода ресурса неадекватный. Мобильная связь куда дешевле обходится, хотя это в принципе более сложная система, которой ты пользуешься постоянно. А тут тупо сайт с задачками.
Особенно интересно было смотреть на комментарии в процессе собеседования. И вообще после этого видео поняла, что алгоритмическая секция не так страшна, как про нее рассказывают. Любой первокурсник мехмата проходит подобное на "зачет" в первую же сессию. Я почему-то считала, что все намного сложнее. Теперь появился интерес подготовиться )))
Ну то есть в яндексе собес идёт путём быстрее подсказать, написать в комментах как ты был хорош в помощи, а по итогу сам меняешь условия на ходу. Нормально вообще) А можно этого же человека самого прогнать по алгоритмической секции? Прям с таким же подходом))
Смысл алгоритмической секции понятен. Не понятно, с какой стати нельзя пользоваться интернетом? В каком случае сотрудник будет писать код И НЕ ИМЕТЬ ВОЗМОЖНОСТЬ ЗАГУГЛИТЬ? Хорошо, что больше и больше компаний уходят от такого подхода.
А что до условия цикла count-- >=0 не дошел вместо сверки указателей пока докапывался? И вообще в этих собесех проьлема в том что на тебя давят своим мониторингом, пока он пытается что то говорить ему некогда думать, делал бы в тишине решил бы задачу оптимально за 5 минут, так что отсев не обоснован
Чел просто алгоритмы не знает, поэтому ему так тяжело. У тебя цикл такой: думаешь - проговариваешь - пишешь - думаешь - проговариваешь - пишешь. Тогда норм будет
42:49 Комментарий 2:07. Почему константа по памяти? Ты создаёшь новый массив. Выделяешь новую память. Не трогаешь старый. А если ты тысячу массивов создашь с длиной исходного, то тоже константа?
Алгоритм два указателя. Создаем два указателя:- левый на наибольшее отрицательное число и правый на наименьшее положительное. После сравниваем модуль отрицательного и положительное число. Далее создаем массив квадратов. Если левый дошел до 0, то остаток заполняем правым, пока не дойдет до границы массива. Если правый дошел до границы, то заполняем левым пока на 0 не уйдет. Так же нужны проверки на размеры 0 и 1
Во времена ФП, ДДД, реактивщины, способность решать алгоритмические задачи, как блокер для полученя оффера? Яндекс, именно поэтому я скипаю всех ваших рекрутёров. Скиллы, которые вам нужны - лично мне не интересны.
"Есть ведро для того чтобы носить воду. Кажется, все знают, что ведро нужно использовать чтобы носить воду. Но кто то его носит как головной убор." Если этот кто но носит ведро как головной убор, но умудряется носить в нем воду (как вариант ведро на голове, как на востоке) то разве это плохо? Это дискриминация людей по способу реализации задачи - нести воду. Если ведро позволяет носить себя на голове, хорошее ли это ведро? Если завтра сделают ведро исключительно для ношения на голове, то увидим ли мы переобувание - про ведро на голове, а кто носит в руках - тот чудак? В этом выражается весь смысл хипстерского айти. У нас есть то, что нам нравится - либо ты отвечаешь как нам нравится, либо идешь куда нибудь ещё. А там, в другой избушке (айти компании) свои погремушки. Это одна из огромных проблем айти - никаких стандартов, как по коду, так и по приему на работу и собеседованиям. В 90% фирм свои стандарты, продукт, алгоритмы (не оптимальные, выдуманные) но вот так - и ты либо соглашаешься, либо идешь искать дальше. И, главное, никакого карьерного роста. Мидл-на одном месте, джун на другом, инженер на третьем, программист на четвертом. Кто ты? Да хрен его знает - мальчик на побегушках по айти компаниям. Ну а с развитием технологий, расширением зоопарка систем, фреймворков, языков попадать в стек всё сложнее. И висят вакансии годами. С зп 100+ к, что для регионов (не Москвы) или дальнего востока, это очень хорошие деньги. Вакансии висят, а людей нет. Никто не подходит ) Хотя это уже ближе к инфоциганству... PS Кроме Яндекса есть и другие компании. Крупных компаний на рынке мало и попасть туда сложно.
я верно понял, что в примере ревью кода на наличие русского слова было реализовано не оптимальное решение, при условии, что ревью кода проходило по следам написанного разработчиком яндекса, который успешно прошел все секции, включая алгоритмическую? )))))))
Мне кажется, что давать намного более сложные задачки в "контесте", на который зовут массово проходить отбор по всяким смс-рассылкам , чем на реальном собесе - не справедливо. Я тоже проходил 2 этапа алгоритмического собеса в Яндекс, и это небо и земля по сравнению с контестом, ещё и подскажут тебе вдобавок. Т.е. по сути получается, что в контест закладывают лишнюю сложность из-за всяких шулеров, а у честных людей нет шансов через него пройти, если только они не гении какие-то. Вдобавок к этому, ваш проверятель решений глючный и не показывает тестовые входные данные,. на которых сыпется решение.
я когда на собесе, двух слов не могу связать внятно... мое IQ уходит в минус..🤣но стоит выйти из созвона и чтоб ни кто не стоял над душой, IQ вырастает выше чем к Эйнштейна..🤣
А помню, у меня после собеса, интервьюер вдруг так вспомнил, что он забыл попросить, список развернуть.. Я ему прямо в чат набрал пару строк перед закрытие и всё.. это было примерно в возрасте моего студенчества, я меня на этот момент самодельный lisp и lua на компе валялся. А потом когда я уже работал там, оказывается у всех это спрашивают, я во-первых не понял зачем и какое отношение в работе имеет, учитывая какие задачи там были, там никто и никогда список вручную делать не позволит. Во-вторых мой водитель команды, оказывается 5 минут на это тратит!! такая сложная штука, для меня это удивлением было.. А опыт не опыт, я вообще жалею, что время на работу там потратил
Мой личный опыт про "алгоритмы не нужны": после месяца подготовки к алг. секции программировать на работе стало комфортнее. Появились две новые привычки: 1) Всегда задумываться о крайних случаях 2) Писать код целиком, без промежуточных запусков Да, без алгоритмов можно работать, но тут как в математике или в теории музыки: всему, что умеешь, применение находится.
ну вообще вторая привычка не особо полезная, при промежуточных запусках проще выявить ошибки, чем написать простыню и потом пытаться понять почему же ничего не работает. Понятно, что в контексте собесов придется делать так, но это не good practice
Я согласен, замечательная логика, должен добавить, что с тех пор, как научился играть в шахматы до уровня КМС, появилось понимание, как планировать написание кода, стал отличать стратегию от тактики, это помогает руководить командой и двигать проект (я тимлид последние 8 лет). Поэтому я считаю, что на собеседованиях на роль тимлида и сеньора мы все обязаны проверять кандидата на умение играть в шахматы. Ведь если тимлид может управлять 16 фигурами на доске и планировать их роль в партии в будущем - он и подавно управится командой в компании. А если он даже с фигурками не может разобраться, то каких успехов можно от него ждать в реальной жизни? Ведь людьми управлять гораздо сложнее! Когда уже яндекс это поймёт и добавит 10-й этап собеседования с шахматным турниром против собеседующего? Кандидатов с рейтингом ниже 2000 рассматривать никак нельзя, это очевидно любому. Ждём прогрессивных нововведений!
вопросы интервьюеру 1) передавать внутрь метода важные данные, которые можно изменить - нарушение инкапсуляции. Какие могут быть претензии по его модификации? 2) зачем эти ребусы писать inputArray[right--]? это не лаконичней, это снижает читаемость - заставляет задумываться, что попусту снижает мыслетопливо. Хотя если это история про написал и забыл, то да.
1) Я не очень понимаю почему первый вопрос адресован ко мне, структуру данных, передаваемую в функцию, выбирал кандидат :) К сожалению, на языке Java/Kotlin массивы нельзя передавать немутабельными, но стоит исходить именно из этого при реализации. По-моему именно про это я и говорил. 2) Это субъективно, поэтому и спорить об этом смысла нет. Главное, чтобы в проекте делали придерживаясь общего codestyle команды.
@@AntonRychagov Про (2) " зачем эти ребусы писать inputArray[right--]" это не субъективно, за такое надо руки отрывать по шею. Понапишут говнокод, который сами понимают только первый час после написания, а потом ловят баги днями.. Зато рассказывают про "знаю хитрости" с умным видом..
Как можно не любить алгоритмы, это же тааак увлекательно:) Сама решаю их иногда на codewars , но только изи левел пока что в начале пути программирования) Даже если это не имеет отношения к реальному программированию, просто приятно провести время, «размять мозг» По задаче, у меня сразу возникла идея с помощью бинарного поиска найти два ближайших к нулю соседних числа в массиве(написать свой бинарный поиск и сохранить индексы левого и правого указателя), и уже их сравнивая двигаться из середины(условно середина-там где отрицательное и положительное соседи) к краям. Квадраты были бы от меньшего к большему. Но после подсказки об крайних числах уже поняла, что тоже чуть промахнулась. Спасибо за выпуск, было интересно☺️
Потому что в сутках 24 часа и всегда стоит выбор куда их "инвестировать". А так как в программировании нужно изучить миллион всего, то решение задачек не всегда стоит во главе списка приоритетов. Так как есть много вещей, изучив которые ты сможешь начать приносить бОльшую пользу бизнесу. Не отрицаю важность алгоритмов, но не задрачивать их до такой степени, чтобы мочь решать их в стрессовой ситуации, под "надзором", сходу, без IDE, без дебагера, с ограничением по времени. Ибо эти навыки не мастхэв (за 6 лет практики только 1 раз столкнулся с задачей, алгоритм для которой пришлось гуглить, остальные были тривиальные в алгоритмическом плане, сложность бизнесовых задач обычно в другом, на что и стоит инвестировать основной пул свободного времени)
Потому что помимо алгоритмов есть дофигища вещей, которые ты каждый день используешь в работе - язык, библиотеки, архитектура кода, систем дизайн, разные базы, очереди, кэши, их особенности, распределенность и репликации разные. При этом алгоритмы ты используешь дай Бог чтоб раз в пару месяцев, и при этом у тебя под рукой и гугл и chatgpt и коллеги и все что угодно есть, и времени достаточно, чтобы его написать и отладить. Вот и получается по сути ситуация, что нужно потратить полгода год на зубрежку-тренировку алгосекции - чтобы исключительно попасть на работу и потом практически не использовать эти знания. Это как если бы перед экзаменом на водительские права спрашивали шахматы (или покер или скороговорки), кто не обыграл интервьюера - дальше не проходит.
какой смысл в бинарном поиске, если у тебя только один запрос на нахождение числа. Т.е ты и так считываешь массив за N, но зато для поиска одного элемента пишешь бин поиск) Из пушки по воробьям, кандидат не догоняет, не брать на работу.
можно было бы разделить исходный массив на два - массив отрицательных чисел и положительных. Отрицательный перевернуть. В while проходимся пока не обойдем оба массива с двумя индексами под каждый. Сравниваем на каждой итерации квадраты значений по индексу и добавляем меньший.
1:25:52 Пример на 3 элементах довольно-таки вырожденный вариант, на котором сразу не очевидна симметрия, на более длинном примере уже можно увидеть 2 подмассива - левую и правую часть, которые необходимо смержить
Антон способен испепеллить самомнение любого раздутого сеньора-помидора за O(1) операций. Компилирует когда моргает, дебажит когда дышит. Студенты Яндекс.Практикума утверждают, когда в аудитории выключился свет, Антон положил руку на сетевой фильтр и все заработало, скомпилировалось, протестировалось и в Яндекс.Лавку улетели заказы на манговые смузи. Собес с Антоном - единственное место в мире, где ты можешь почувствовать себя nullable объектом. Ходит легенда, что однажды самый сильный в мире разработчик написал once-функцию, позволяющую делить на ноль. Когда она отработала, появился Яндекс. Говорят, этим разрабом был Антон. Антон любит дождь, потому что в нем можно прятать слёзы неокрепших сеньоров, дошедших до алгоритмической секции и нахрен проваливших её. Официально является GodObject-ом Яндекса. Прошедшие и непрошедшие алгоритмическую секцию с Антоном живут в разных районах Силиконовой Долины. Ну а если серьёзно, Антон - топовый прогер. Единственный человек, от которого ты искренне рад удостоиться похвалы за интеллект И! От которого не обидна никакая критика. Знакомство и работа с ним - лучшее, что может произойти в Яндексе, потому что таких профессионалов просто не найти. Я рад быть знаком с этим человеком.
Не могу не оставить комментарий относительно задачи 1. Вся проблема кандидата это не знание указателей. Как только понимаешь что все алгоритмы разделяются на паттерны под эти алгоритмы то все выглядит проще. Паттерн только заметить надо. Да, вспомнил про них, после подсказки. А когда дрочишь эти алгоритмы то всегда первым делом при работе с массивами пытаешь указатели применить
Я чет не понял а что там у интервьюера со сложностью по памяти - откуда там константа если не инплейс заполнение? Досмотрел до конца - Интервьюер: «я бы мог решить эту задачу за 5 минут» Ведущий: «как решить эту задачу inplace с той же сложностью» Интервьюер: «никак» В принципе все что нужно знать про интервьюеров Яндекса
01:32:45 Изменение индекса и одновременное обращение к массиву по этому индексу - НЕ ПРИНЯТ. В коммерческом программировании код должен читаться (и проверяться на корректность) слету. Сегодня пишем на одном языке, завтра на другом, а потом все это путаем и ловим ошибку полдня. Никогда так не делайте!
@@AndroidBroadcastесли было заготовлено две задачи, тогда почему из получасового интервью отнимают время на вербальное объяснение решения интевьюеру? Почему задача изначально поставлена неполностью и интервьюер отнял время у собеседуемого на уточнение условий задачи про линейное решение?
Двумя указателями идешь Если числа равны, то разницы особой нет, ведь порядок не важен в каком они будут стоять Что так, что так конечный массив будет 4 4 9 9
Мне как sql пареньку интересно решать такие задачи. На мой взгляд такие задачи дают важный урок: 1.не считай то что не нужно ; 2.используй все исходные данные для поиска ответа.
Про то что задач хард не бывает на собеседованиях Яндекса это ложь, сам лично такую задачу решал, по крайней мере на LeetCode задача светится как Хард, возможно у Яндекса своя оценка задач
@@fromsiberia4985 есть предварительные секции, секции по специальности, архитектура и алгоритмы. На каждой, безусловно, могут быть алгоритмические задачи. Я говорю именно про последнюю, она более формализованная, чем остальные.
Не согласен с интервьюером, что видно, что человек много пишет, тк осмысленно именует переменные. Как раз кодит он мало, у него нет мышечной памяти элементарной, как минимум модули обозначаются как abs. Count названа некорректно, скорее pos. Плюс те же отступы, left != right и ряд других моментов
В исходном массиве есть максимальный элемент - последний. Берем цикл, первый элемент возводим в квадрат, если он становится больше максимального, то ставим его в конец - и так делаем с каждым элементом исходного массива. Сложность О(n). Верно?
Решение за квадрат выйдет так-то. Перебор всего массива (О(n)) + удаление первого элемента, а значит и дальнейший сдвиг массива (O(n)). Неэффективно, да и к тому же неверно.
Уровень требований должен соответствовать уровню предлагаемого заработка. А по факту яндекс не конкурент нормальным ИТ-компаниям. Потому и текучка там бешеная. Но всегда находятся талантливые стажеры которые поработают годик другой и пойдут дальше
задача была поставленна некоректно сразу нужно говорить что массив сортированный имеет положительные и отрицательные числа и тд теперь я понимаю почему в крупные компании не берут нормальных программистов.
Ведущий сразу же написал пример массива с отрицательным числом, хотя по хорошему, собеседуемый сам должен был догадаться или уточнить, внимательно прочитав условие
Блин, такая простая задача, и человек, который работает уже несколько лет, так туго ее кодит... Делает костыли, такой кривой код... Что же он пишет в реальных задачах? Одну ошибку не заметил ни тот, кто писал, ни тот, кто принимал. В конце в костыле после цикла не нужны проверки левого и правого, там ссылка на одну ячейку, там надо просто писать последнее число в итоговый массив и все. Те, кто в комментах пишут, что алгоритмические тесты не нужны, ответ вам такой. Если у программиста проблема с мышлением, он будет писать плохо. Другое дело, что во многих решениях похрен на красивый код, грамотную реализацию, работает и нормально. Там обезьяну посади и она напишет, потому и не важно проверять на алгоритмы. А уметь думать могут далеко не все. Сколько кривого кода в результате получается, это мрак.
Я тоже пока смотрел, всё ерзал и офигевал, ну как так можно тупить. А потом подумал я то сидел на диване мне никто в ушал не нудел , не перебивал и не стучал по клавиатуре. И код я бы писал в IDE и там были бы все подсказки, и дебагинг на лету. И на месте этого парня бы тоже затупил.
походу надо кодить молча, чтобы тебе минусов не наставили. В процессе написания решения для новой для тебя задачи всегда будет изначально грязное решение, которое в конце можно докрутить. А если решение знаешь, то просто пишешь самое оптимальное решение, которое люди придумали
const sortFunc = arr => { let result = [] for(num of arr) { const square = num * num result.push(square) } return result.sort((a,b) => a-b) } оцените решение :)
Тот бородатый мужик настоящий хитрюга, я про то что он дал в самом начале отсортировать массив из трех элементов. Думаю если бы дали парню тому массив из 5 элементов, было бы проще найти решение.) В любом случае, мне было интересно рисовать решение на бумаге. ) Моё решение: orderTwo(arr[ ]) { L = 0 R = arr.len - 1 dump [ ] = new arr[arr.len] for cur = arr.len - 1; 0 < cur; cur--; if abs(arr[L]) < abs(arr[R]) dump[cur] = arr[R] * arr[R] R-- else dump[cur] = arr[L] * arr[L] L++ show(dump[ ]) }
а в этом языке список на чём основан? просто в шарпе список на основе массива сделан и он расширяться будет с затратами, если массив большой и не задать лист изначально по размеру
01:24:26 Крайне сомнительная тема с константной сложностью алгоритма по памяти. По определению, емкостная сложность алгоритма - это сколько памяти алгоритму требуется в процессе работы. Алгоритм в процессе работы создает выходной массив. Не до своей работы, не после своей работы - во время своей работы. Значит, алгоритму для работы нужно линейное количество памяти. Если поставить другую задачу: разрешено модифицировать входной массив, то это другой алгоритм с константной сложностью по памяти.
Продублирую ответ двухмесячной давности: "Это холиварный вопрос. Прочитав на stack exchange вопрос под номером 83586 можно получить ответ почему именно. На собеседованиях я специально уточняю, что меня интересует именно дополнительная память, потребляемая алгоритмом, а не какая-то абстрактная память, чтобы не было двусмысленности. На этом собеседовании я сделал так же :)"
@@AntonRychagov В дополнение к моему прошлому ответу. Я нашел какое-то обсуждение на SE в разделе cs номер 156949, еще видел обсуждения на SO. Так вот, там обсуждается: включать ли ВХОД алгоритма в емкостную сложность. В обсуждении на SE 156949 приводится ссылка на книжку ОРейли "Hands-On Data Structures and Algorithms with JavaScript by Kashyap Mukkamala" Space complexity and Auxiliary space Space complexity and Auxiliary space are two of the most often confused and interchangeably used terms when talking about the space complexity of a certain algorithm: Auxiliary Space: The extra space that is taken by an algorithm temporarily to finish its work Space Complexity: Space complexity is the total space taken by the algorithm with respect to the input size plus the auxiliary space that the algorithm uses. -- то есть НИГДЕ не обсуждают, включать ли ВЫХОД алгоритма в емкостную сложность. Разговоры только про ВХОД, а про ВЫХОД всем понятно (что надо включать, потому что выход формируется в результате работы алгоритма) Может, ты что-то перепутал? ("ты" - ну это как в яндексе и в интернетах принято)
@@vitaly1461 Я как раз спрашиваю про Auxiliary Space Complexity. В любом случае, несмотря на то, что Саша на интервью ответил некорректно на этот вопрос, я увидел, что он понимает, как именно считается Space Complexity, а это главное. Я бы не стал снижать ему за это баллов, если бы это было реальное собеседование.
@@AntonRychagov Почему-то твои ответы ютуб часто прячет.. каким-то образом получилось увидеть, а теперь снова не видно. Из ответа я понял, что ты не вникал в суть моего сообщения. Просто обрати внимание, что никто не обсуждает объем выхода. Обсуждают: 1) объем входа 2) объем памяти в процессе работы алгоритма 3) общий объем памяти. В цитате из книги ОРейли не обсуждается объем выхода. Вопрос - Как думаешь, почему не обсуждают объем выхода? Я уже отвечал на этот вопрос. Попробуй теперь ты. (обсуждение 83586 недоступно, про это я писал, не знаю что там)
Программист проявил смелость, конечно. Но кажется, что не из-за волнения он так плохо справился. Не понимаю, как с тремя годами опыта можно так... тормозить
После этого видео расхотелось даже идти на собеседование в Яндекс. Ну вот представьте вы натренировались на собес, вас взяли на работу, а потом с этим каждый день работать, и вместо arr.map().sort() писать такие портянки? Ну нафиг, где тут удовольствие от работы?))
На мой взгляд можно сколько угодно восхищаться супер крутым пилотом болида, но если он не знает хотя бы на примитивном уровне как работает ДВС, то это смешно. Можете сколько угодно гонять свои JSONчики от сервера к клиенту и называть себя крутыми программистами
А можно в идеале знать как устроен ДВС до мельчайшего винтика, и при этом каждый раз глохнуть на светофоре. Если условное приложение работает, и приносит бизнесу деньги, то уже не важно какое О от N занимает написанный алгоритм
мои решения C# public static int[] SquareNums(int[] nums) { var res = new int[nums.Length]; for(int i = 0; i < num.Length; i++) res[i] = nums[i] * nums[i]; Array.Sort(res); return res; }
public static int[] SquareNums(int[] nums) { var res = new int[nums.Length]; int index = nums.Length - 1; int leftPtr = 0, rightPtr = nums.Length - 1; while(leftPtr nums[rightPtr]) { res[index] = SqrNum(nums[leftPtr]); leftPtr++; } else { res[index] = SqrNum(nums[rightPtr]); rightPtr--; } index--; } return res;
Мне одному показалось, что задача была сортернуть в итоге? Судя по алгоритму он работает для [-3,2,4] но если расширить входные данные, он уже не работает. По ощущению тут не было ни нормальной задачи, ни нормальной оценки кандидата... Тут кандидата по моему просто валили... Нет таких сортировок строго за O(n) только если в лучших случаях (Что и было реализовано в данном видео)... Смотрел и недоумевал че тут вообще происходит... Яндекс такой яндекс...😂😂😂
Я ни разу не программист, я химик-технолог. Но интересовался. Мне кажется, что тут дело не в алгоритмах, а в обычной логике. Человек проигнорировал/не заметил, что изначальный массив был отсортирован. После этого надо было заканчивать интервью. Даже я это понимаю, хотя сильно не уверен, что смог бы написать конкретный код.
8:30 "алгоритмическая секция блокирует, даже если остальные прошел на отлично"
Мы поставили ее в конец.
Это так алгоритмически оптимально :facepalm
1:52:25
Саше большой респект, смелый поступок прийти на стрим по алгоритмике от Яндекса!
Очень круто, прям на одном дыхании смотрел. Классно, что показали как на стороне яндекса всё делается. Заметки огонь просто. Спасибо всем участникам и Кириллу за организацию.
Для себя главный вывод сделал, что лишнего лучше не болтать :))))
Сказали что нужно решить задачу максимально оптимально и по времени и по памяти. В то же время пишет коммент "Кандидат откуда-то взял идею, что нужно делать in-place:)"! Отличный подход, яндекс!
что значит in-place ?
@@dmitriykonopinskiy3793изменять текущий входной массив не создавая новый
@@dmitriykonopinskiy3793 если вы не знаете значение данных слов + не умеете пользоваться переводчиком, думаю, вам не стоит вообще пытаться в программирование
@@dmitriykonopinskiy3793 менять элементы внутри массива, не создавая новый список
@@dmitriykonopinskiy3793"на месте". то есть не выделяя новую память
Самое обидное, пройти все круги ад... собесов в Я, после чего получить оффер, который даже до уровня столичной галеры средней руки не дотягивает.
Статус, опыт и дальнейший. Не все ради огромных денег работают. Зато после Яндекса я получал очень жирные оферы выше среднего
@@AndroidBroadcast ой да перестаньте, мы все продаем свое время работодателю. И абсолютно нормально ценить себя и свой труд максимально высоко. А для души есть пет проекты ) Да и статус... Ну может быть в этом что то есть, но я выбрал в свое время нормальный оклад. И ни капли не жалею ) Но какгрицца, это сугубо личный кейс, ни в коем разе не настаиваю на мнении...
@@AndroidBroadcastтак а с чего ты взял, что ты бы без яндекса их не получил? Куча людей сидят на очень жирных офферах, но яндекса в резюме не имеет. Так и помимо прочего полно других статусных российских бигтех компаний, которые имеют адекватный процесс найма и платят больше. А несколько недель/месяцев решать литкод для собеса, чтобы потом быть гребцом за зп ниже рынка, но в яндексе, кажется такой себе идеей.
@@AndroidBroadcast чем измеряется статус? Способностью заработать больше в других местах? Тогда можно сразу пойти зарабатывать туда.
Тут скорее тема, что у фаангов подход похожий (только поадекватней), так что можно использовать Яндекс как бесплатное мок-собеседование при подготовке сразу в фаанг)
На мой взгляд, большинство разрабов с большим опытом коммерческой разработки, но без олимпиадного бекграунда, не будут тратить время на leetcode задачки.
Зачем ? Есть компании в России, которые платят не меньше или больше yandex, но на их собесах не спрашивают оторванные от реальной жизни задачки.
Конечно, такие задачки используются при найме в FAANG, но там люди готовятся по полгода именно из-за 'жирных' офферов.
А yandex, судя по всему, принимает в основном молодежь из бывших олимпиадников )
Это как в универе предмет никому не сдался но препод будет душить как ненормальный
Я как миддл разработчик в крупной компании иногда не сходу въезжаю как решать литкодовские задачки даже легкого уровня, но тем не менее трудностей в работе не возникает.
@@olegin1995 трудности возникают у вашего руководства виде доп затрат на ваш неоптимальный код
а вы что не пользуетесь их ПО? попробуйте и поймете в чем прикол..🤣 я когда пользуюсь их ПО, икают все, даже те кто еще только собирается туда пойти.🤣знать алгоритмы конечно надо, но надо еще уметь правильно писать! не зная на хорошем уровне языка на котором пишешь, от алгоритмов толку что мертвому припарка..🤣 у них алгоритмы просто отсеивают людей. туда не берут лучших или худших, берут кто пройдет! а чтоб не перли все подряд, сделали это как важное. так делали во всех топ компаниях чтоб отсеять как можно больше, ну а если прошел то ок, придется взять..🤣 какой-то прям пользы, нет... я смотрю их собесы, да часто код верно написан но проблему которая потом догонит он не решает.. и тогда вопрос нафига?🤣алгоритмы писать может, а язык нормально не понимает, и лепит так что оптимизация алгоритмом тащится а языком гробиться. а потом посмотрели медленно пашет, переписали на более быстрый яп..🤣 вместо того чтоб просто нормально написать.
@@IT_psychopath Согласен
Про необходимость задач на алгоритмы. Можно было не лукавить, а сказать честно. Подбор в яндексе - это конвейер, а собеседования - фильтр. Выставили фильтр на задрот литкода. Если его не пройдет отличный программист, то у него за спиной стоит еще пять таких же. Пока народ идет в Яндекс, так и будет.
А что тебе мешает порешать задачи?
@@user-dt9tb2rm7lничего не мешает порешать задачи, но при выборе кандидата это ключевой показатель, который +- ничего не значит, я собесил людей у которых 5+ лет опыта в Я, может мне конечно попадались "интеллектуалы" которые 2 слова не смогли связать, но это дно полное. Вывод: алгоритмы +- нужны но это не ключевой показатель при выборе кандидата.
@@user-dt9tb2rm7l даже если ничего не мешает решать задачи, этот факт не дает ответа на вопрос об эффективности фильтра.
Когда у тебя 100 людей на одну вакансию то лучше их быстро отфильтровать и набрать математиков чем искать мифических "хороших программистов" которые не умеют решать алгоритмические задачи.
@@zxcq откуда следует, что именно это "лучше"? И не нужно подменять условия, не "не умеют решать алгоритмические задачи", а "не укладываются в 30 минут, 10 из которых потрачено на общение с интервьюером для выяснения всех требований"
Это звучит здорово, пока случайно не заходишь на Яндекс маркет. Это не то что на телефоне еле работает, так и на компьютере с большим трудом. Казалось бы, заявляется всё для оптимизации, но на выходе не сильно отличается, а местами и хуже чем в среднем по больнице
просто после таких задач разработчик яндекса не берет мап и сорт, а пишет ин-плейс метод на указателях, а потом ловит баги с утекшей памятью)
@@alexlightweight по какому блату? прийти в яндекс через собеседование - редкость по вашему, получается?
@@torburgmaxредкость конечно. Я как-то по приколу подался на самую простейшую вакансию Яндекса, чтобы посмотреть, реально ли туда попасть. Вакансия была как раз в подразделение маркета. Заниматься подготовкой и модерацией карточек товаров. Выслали тестовое задание. Сделал. Задание кстати муторное из нескольких частей. Но даже на собеседование не пригласили. И это вакансия была на полный рабочий день за что-то там 25 или 28 тыс. в месяц. Не знаю, что не устроило и каких гениев они на эти деньги ищут. Я может и не лучший специалист в мире, но уж точно не худший. Хотел бы я посмотреть на то, кого они находят на такие зарплаты.
@@torburgmaxв Яндекс можно попасть по инвайту знакомых, сам избежал так собеседования. Главное иметь знакомых разработчиков там
просто спрашивают алгосики, а на особенности языка и фреймворка можно и забить, нафиг они нужны)
42:37 -- я считаю, что некорректно считать, что сложность по памяти оценена некорректно. Мы же выделяем память под выходной массив. И чем больше первый, тем больше второй, Таким образом, потребление памяти растет линейно. Другое дело, что зачастую это учитывать необязательно, и на практике лучше спрашивать, учитывать ли выходной массив в оценке. Но ответ абсолютно корректен (если я заблуждаюсь, то объясните, пожалуйста, почему)
Это холиварный вопрос. Прочитав на stack exchange вопрос под номером 83586 можно получить ответ почему именно. На собеседованиях я специально уточняю, что меня интересует именно дополнительная память, потребляемая алгоритмом, а не какая-то абстрактная память, чтобы не было двусмысленности. На этом собеседовании я сделал так же :)
@@AntonRychagov Почему в этом случае память ты называешь абстрактной? Сколько ни думаю, получается, что на выходе мы возвращаем дополнительный массив, занимающий столько же памяти, сколько и исходные данные. Если исходный массив занимает 1ГБ, а у нас памяти 1.5 ГБ, то на выполнение алгоритма не хватит памяти. Потому что память не абстрактная , а вполне себе реальная. И дополнительная.
Не получилось найти обсуждение по номеру. Нет ли у тебя возможности прислать ссылку или что-нибудь еще?
@@KlGleb говорить просто "Оцени потребляемую алгоритмом память" - говорить про какую-то абстрактную память. Это может быть как аллоцируемая дополнительная память, необходимая для корректно работы алгоритма, так и вся память (то бишь плюс входные и выходные данные). По этой причине я и говорю про конкретную память - мне нужна оценка именно дополнительной памяти, потребляемой алгоритмом.
@@AntonRychagov Но ведь эта память выделяется на конкретной строчке алгоритма, и она нужна для работы алгоритма (иначе пришлось бы "грязно модифицировать исходный массив"). То есть эта память в данном случае нужна для конкретно работы алгоритма, разве не так?
@@KlGleb это выход алгоритма, то бишь не попадают под определение дополнительной памяти.
Ссылку youtube, к сожалению, режет :( Так что могу посоветовать только скопировать ссылку на любой ответ в stack exchange и подменить номер :)
Заметил зависимость, чем больше алгоритмистов работает над проектом тем больше это неюзабельное г-но. Вот взять бы хоть фаанги, ну постоянно что-то падает, релизы с кучей багов и т.д. могу частично согласиться, что есть еще проблема больших команд, но это уже проблемы менеджмента. Работал с парнем, который был очень крутой андроидщик и даже в Тинькофф успел поработать, так вот его на алгоритмах в фб срезали, на задачке по графам. Я к чему это, к тому что вот он точно делает лучше чем эти калеки из фб, но время потраченное на андроид они потратили на литкод в итоге пишут не андроид, а литкод...
прямо в точку сказано про андроид и литкод. кроме алгоритмов есть еще сам яп на котором пишешь и еще гора всего.. если ты не понимаешь где какой цикл лучше или вообще итератор, а может и рекурсия, алгоритмы не помогут писать хорошо, лишь усложнят это все.. аналогично и с паттернами.. открываешь а там куча паттернов, алгоритмов, а сам код такое говно откровенное..🤣
Просто основная масса говнокодеры, алгоритмы здесь не причем.
@@StringerDкак не быть говнокодером ?
Воистину
1:24:27 если не ошибаюсь, у сдающего по памяти сложность верна оценена - O(n) не O(1) так как он создал result с N элементами
Поддерживаю, экзаменующему двойка
Сложность по памяти оценивается для вспомогательных данных, а не для выходных. Иначе бы сложность зависела от сигнатуры функции (возвращает ли она массив или в нее передается уже преаллоциорованный выходной массив)
@@dmitrysapelnikov
Ага, расскажи это процессу JVM, когда ему памяти не хватит
Яндекс парадоксален, дофига собесов, кажется что туда проходят одни из лучших, а итог - вечные утечки данных, почти все приложения лагучее говно, где не только кадры видно даже на флагманах, но и куча всяких тупых багов, сервис хороший а приложением через силу пользуешься, даже яндекс карты - хорошая либа, видно что все же нормальные разрабы приложили руку, но почему она блин такая жирная
Потому что к алгоритмическим секциям надо долго готовиться и постоянно поддерживать эти знания.
В обычной то работе таких задач почти и нет ) А для подготовки и поддержки знаний нужно много свободного времени.
А у кого оно есть - у молодых ребят, вчерашних выпускников. Ибо ни детей, ни пресловутой ипотеки ))
Но вот когда дело доходит до реального продукта - там же в основном нужны другие навыки, банально опыт.
И, как следствие, возникает то, что вы описали )
Зато они умеют задачки с leetcode быстро решать ^^
Яндекс как организация - так себе. Там везде аналогичный подход абсолютно бредовый.
Я бы ещё и вычисление модуля убрал. Можно сравнивать квадраты, которые идут в ответ.
Начал что-то про ведо на голове, так и не пояснил при чём здесь ведро. Отличный пример мышления ребят из яндекса.
Яндекс - компания немного оторванная от реальности. Сталкивался с их спецами 3 раза и все три раза абсолютное разочарование. К тому же у них странное понятие о справедливости
Вообще не понял тезис о том что IDE развращает. И нужно писать код в блокноте. IDE это инструмент обязательный для разработчика. Я никогда нигде в жизни и в работе не писал код в блокноте и на листочке, разве что в универе. Давайте еще гвозди будем забивать рукой, молоток развращает. Да я не помню какие методы у List array и тд. но Studio мне подскажет, и я даже не задумываюсь об этом, я знаю что они есть и думаю над самой задачей а не парюсь над тем как называется тот или иной метод.
Задача была не сложная, но я очень хорошо понимаю соискателя, на стрессе в голове пустота. На мой взгляд он прошёл хорошо. Мне на собес в Яндекс попалась задача из раздела "Medium" литкода - и да, я не прошёл с первого раза))
Превьюшка к видео - огонь 🔥
Я даже успела подумать, что это Антон свой канал завёл)
Великолепный собеседующий, мегапрофессионал, идеальный руководитель, человек признанный, авторитетный, мэтр 😃
Классный получился разбор секции!
В целом, там не очень сложная секция - изи + мидл с литкода в большинстве случаев. В случае с поисковиком, например, я понимаю зачем эти алгоритмы спрашивают, вот только зачем они в Яндекс Банке - хз, я в финтехе почти всю свою карьеру (около 7 лет), на одной руке пальцы останутся, чтобы посчитать, сколько раз мне понадобился какой-нибудь алгоритм, например нахождение значения n-го элемента в односвязном списке. Не могу понять, зачем это спрашивают в областях, в которых не нужны эти алгоритмы, а если и понадобились раз в год, то и посмотреть можно
А есть список задач с литкода? А то за сайтик по решению задач отдавать 160 баксов? Цена неадекватная. Там к тебе препода не приставляют. Ладно там пару баксов в месяц отдать. Но ценник для такого рода ресурса неадекватный. Мобильная связь куда дешевле обходится, хотя это в принципе более сложная система, которой ты пользуешься постоянно. А тут тупо сайт с задачками.
@@phat80 так там бесплатных полно, я на них и тренил, имхо, их хватит. По сути, алгоритмов не так много, а все задачи просто их вариации
@@tr3mendous24 спасибо за информацию. Что-то думал, что там платный доступ только.
Особенно интересно было смотреть на комментарии в процессе собеседования.
И вообще после этого видео поняла, что алгоритмическая секция не так страшна, как про нее рассказывают.
Любой первокурсник мехмата проходит подобное на "зачет" в первую же сессию.
Я почему-то считала, что все намного сложнее. Теперь появился интерес подготовиться )))
@@alexlightweight алгоритмы не только в яндекс нужны. Их еще и в фаанг использует :)
Ну то есть в яндексе собес идёт путём быстрее подсказать, написать в комментах как ты был хорош в помощи, а по итогу сам меняешь условия на ходу. Нормально вообще) А можно этого же человека самого прогнать по алгоритмической секции? Прям с таким же подходом))
Какое условие поменялось?
@@alexneo4880 ну по условию задачи как минимум никто не уточнил, в том же все массиве все должно произойти или записываем в новый
25:51 чувак пришел на собес по алгам от Я и говорит, что не помнит алгоритмы сортировок.
Смысл алгоритмической секции понятен. Не понятно, с какой стати нельзя пользоваться интернетом? В каком случае сотрудник будет писать код И НЕ ИМЕТЬ ВОЗМОЖНОСТЬ ЗАГУГЛИТЬ? Хорошо, что больше и больше компаний уходят от такого подхода.
Недавно проходил собес в один Российский банк, на нём давали гуглить, но почему-то только на английском и без поисковиков с нейронками)
Спасибо, за такой формат
А что до условия цикла count-- >=0 не дошел вместо сверки указателей пока докапывался? И вообще в этих собесех проьлема в том что на тебя давят своим мониторингом, пока он пытается что то говорить ему некогда думать, делал бы в тишине решил бы задачу оптимально за 5 минут, так что отсев не обоснован
Чел просто алгоритмы не знает, поэтому ему так тяжело. У тебя цикл такой: думаешь - проговариваешь - пишешь - думаешь - проговариваешь - пишешь. Тогда норм будет
Забавная попытка 15-минутного оправдания бесполезной секции, но так и не услышал ни одного случая, когда это понадобилось Android-разработчику.
В коментах собрались одни обиженки, которых не взяли в Яндекс
Похоже, это такая традиция :)
Кирилл, спасибо за организацию.
Хлопаю Сане, красавчик!
42:49
Комментарий 2:07.
Почему константа по памяти?
Ты создаёшь новый массив. Выделяешь новую память. Не трогаешь старый.
А если ты тысячу массивов создашь с длиной исходного, то тоже константа?
Алгоритм два указателя.
Создаем два указателя:- левый на наибольшее отрицательное число и правый на наименьшее положительное.
После сравниваем модуль отрицательного и положительное число.
Далее создаем массив квадратов.
Если левый дошел до 0, то остаток заполняем правым, пока не дойдет до границы массива.
Если правый дошел до границы, то заполняем левым пока на 0 не уйдет.
Так же нужны проверки на размеры 0 и 1
Во времена ФП, ДДД, реактивщины, способность решать алгоритмические задачи, как блокер для полученя оффера? Яндекс, именно поэтому я скипаю всех ваших рекрутёров. Скиллы, которые вам нужны - лично мне не интересны.
@@alexlightweight видел, пользуюсь, полная балумба
В этой задаче счетчик текущей позиции записи count по большому счету можно не вводить, т.к. его значение всегда будет равно right - left
Спасибо за развернутые комментарии и за задачу) Очень понравилось, как ведет себя интервьюер, было бы комфортно)
Было похожее задание про симметричную последовательность на Яндекс Тренировки 1.0 , в секции 2 - Линейный поиск, F задача.
спасибо за видео!
"Есть ведро для того чтобы носить воду. Кажется, все знают, что ведро нужно использовать чтобы носить воду. Но кто то его носит как головной убор."
Если этот кто но носит ведро как головной убор, но умудряется носить в нем воду (как вариант ведро на голове, как на востоке) то разве это плохо? Это дискриминация людей по способу реализации задачи - нести воду. Если ведро позволяет носить себя на голове, хорошее ли это ведро? Если завтра сделают ведро исключительно для ношения на голове, то увидим ли мы переобувание - про ведро на голове, а кто носит в руках - тот чудак?
В этом выражается весь смысл хипстерского айти. У нас есть то, что нам нравится - либо ты отвечаешь как нам нравится, либо идешь куда нибудь ещё. А там, в другой избушке (айти компании) свои погремушки. Это одна из огромных проблем айти - никаких стандартов, как по коду, так и по приему на работу и собеседованиям.
В 90% фирм свои стандарты, продукт, алгоритмы (не оптимальные, выдуманные) но вот так - и ты либо соглашаешься, либо идешь искать дальше.
И, главное, никакого карьерного роста. Мидл-на одном месте, джун на другом, инженер на третьем, программист на четвертом. Кто ты? Да хрен его знает - мальчик на побегушках по айти компаниям. Ну а с развитием технологий, расширением зоопарка систем, фреймворков, языков попадать в стек всё сложнее.
И висят вакансии годами. С зп 100+ к, что для регионов (не Москвы) или дальнего востока, это очень хорошие деньги. Вакансии висят, а людей нет. Никто не подходит )
Хотя это уже ближе к инфоциганству...
PS
Кроме Яндекса есть и другие компании. Крупных компаний на рынке мало и попасть туда сложно.
я верно понял, что в примере ревью кода на наличие русского слова было реализовано не оптимальное решение, при условии, что ревью кода проходило по следам написанного разработчиком яндекса, который успешно прошел все секции, включая алгоритмическую? )))))))
Мне кажется, что давать намного более сложные задачки в "контесте", на который зовут массово проходить отбор по всяким смс-рассылкам , чем на реальном собесе - не справедливо. Я тоже проходил 2 этапа алгоритмического собеса в Яндекс, и это небо и земля по сравнению с контестом, ещё и подскажут тебе вдобавок. Т.е. по сути получается, что в контест закладывают лишнюю сложность из-за всяких шулеров, а у честных людей нет шансов через него пройти, если только они не гении какие-то. Вдобавок к этому, ваш проверятель решений глючный и не показывает тестовые входные данные,. на которых сыпется решение.
ахах тесты ему не показывают))
Блин, вот сидя на диванчике кажется легко, нг на собесах мозг выходит погулять...
я когда на собесе, двух слов не могу связать внятно... мое IQ уходит в минус..🤣но стоит выйти из созвона и чтоб ни кто не стоял над душой, IQ вырастает выше чем к Эйнштейна..🤣
Отличный сервис для собесов! Мы идем на встречу прогрессу
А помню, у меня после собеса, интервьюер вдруг так вспомнил, что он забыл попросить, список развернуть.. Я ему прямо в чат набрал пару строк перед закрытие и всё.. это было примерно в возрасте моего студенчества, я меня на этот момент самодельный lisp и lua на компе валялся. А потом когда я уже работал там, оказывается у всех это спрашивают, я во-первых не понял зачем и какое отношение в работе имеет, учитывая какие задачи там были, там никто и никогда список вручную делать не позволит. Во-вторых мой водитель команды, оказывается 5 минут на это тратит!! такая сложная штука, для меня это удивлением было.. А опыт не опыт, я вообще жалею, что время на работу там потратил
Мой личный опыт про "алгоритмы не нужны": после месяца подготовки к алг. секции программировать на работе стало комфортнее. Появились две новые привычки:
1) Всегда задумываться о крайних случаях
2) Писать код целиком, без промежуточных запусков
Да, без алгоритмов можно работать, но тут как в математике или в теории музыки: всему, что умеешь, применение находится.
ну вообще вторая привычка не особо полезная, при промежуточных запусках проще выявить ошибки, чем написать простыню и потом пытаться понять почему же ничего не работает. Понятно, что в контексте собесов придется делать так, но это не good practice
@@liam_ma_alla хз моим коллегам абсолютно все равно сколько я раз запустил код) им вообще пофиг на мои задачи, у них свои есть
А у меня теперь нет коллег. Только подчиненные :)
@@liam_ma_alla 😎😅
Я согласен, замечательная логика, должен добавить, что с тех пор, как научился играть в шахматы до уровня КМС, появилось понимание, как планировать написание кода, стал отличать стратегию от тактики, это помогает руководить командой и двигать проект (я тимлид последние 8 лет).
Поэтому я считаю, что на собеседованиях на роль тимлида и сеньора мы все обязаны проверять кандидата на умение играть в шахматы. Ведь если тимлид может управлять 16 фигурами на доске и планировать их роль в партии в будущем - он и подавно управится командой в компании. А если он даже с фигурками не может разобраться, то каких успехов можно от него ждать в реальной жизни? Ведь людьми управлять гораздо сложнее!
Когда уже яндекс это поймёт и добавит 10-й этап собеседования с шахматным турниром против собеседующего? Кандидатов с рейтингом ниже 2000 рассматривать никак нельзя, это очевидно любому. Ждём прогрессивных нововведений!
вопросы интервьюеру
1) передавать внутрь метода важные данные, которые можно изменить - нарушение инкапсуляции. Какие могут быть претензии по его модификации?
2) зачем эти ребусы писать inputArray[right--]? это не лаконичней, это снижает читаемость - заставляет задумываться, что попусту снижает мыслетопливо. Хотя если это история про написал и забыл, то да.
1) Я не очень понимаю почему первый вопрос адресован ко мне, структуру данных, передаваемую в функцию, выбирал кандидат :) К сожалению, на языке Java/Kotlin массивы нельзя передавать немутабельными, но стоит исходить именно из этого при реализации. По-моему именно про это я и говорил.
2) Это субъективно, поэтому и спорить об этом смысла нет. Главное, чтобы в проекте делали придерживаясь общего codestyle команды.
@@AntonRychagov Про (2) " зачем эти ребусы писать inputArray[right--]" это не субъективно, за такое надо руки отрывать по шею.
Понапишут говнокод, который сами понимают только первый час после написания, а потом ловят баги днями.. Зато рассказывают про "знаю хитрости" с умным видом..
@@vitaly1461 как скажете, это ваше право так считать.
Как можно не любить алгоритмы, это же тааак увлекательно:)
Сама решаю их иногда на codewars , но только изи левел пока что в начале пути программирования)
Даже если это не имеет отношения к реальному программированию, просто приятно провести время, «размять мозг»
По задаче, у меня сразу возникла идея с помощью бинарного поиска найти два ближайших к нулю соседних числа в массиве(написать свой бинарный поиск и сохранить индексы левого и правого указателя), и уже их сравнивая двигаться из середины(условно середина-там где отрицательное и положительное соседи) к краям. Квадраты были бы от меньшего к большему.
Но после подсказки об крайних числах уже поняла, что тоже чуть промахнулась.
Спасибо за выпуск, было интересно☺️
Я тоже про бинарный поиск подумал
Потому что в сутках 24 часа и всегда стоит выбор куда их "инвестировать". А так как в программировании нужно изучить миллион всего, то решение задачек не всегда стоит во главе списка приоритетов. Так как есть много вещей, изучив которые ты сможешь начать приносить бОльшую пользу бизнесу.
Не отрицаю важность алгоритмов, но не задрачивать их до такой степени, чтобы мочь решать их в стрессовой ситуации, под "надзором", сходу, без IDE, без дебагера, с ограничением по времени. Ибо эти навыки не мастхэв (за 6 лет практики только 1 раз столкнулся с задачей, алгоритм для которой пришлось гуглить, остальные были тривиальные в алгоритмическом плане, сложность бизнесовых задач обычно в другом, на что и стоит инвестировать основной пул свободного времени)
Потому что помимо алгоритмов есть дофигища вещей, которые ты каждый день используешь в работе - язык, библиотеки, архитектура кода, систем дизайн, разные базы, очереди, кэши, их особенности, распределенность и репликации разные. При этом алгоритмы ты используешь дай Бог чтоб раз в пару месяцев, и при этом у тебя под рукой и гугл и chatgpt и коллеги и все что угодно есть, и времени достаточно, чтобы его написать и отладить.
Вот и получается по сути ситуация, что нужно потратить полгода год на зубрежку-тренировку алгосекции - чтобы исключительно попасть на работу и потом практически не использовать эти знания.
Это как если бы перед экзаменом на водительские права спрашивали шахматы (или покер или скороговорки), кто не обыграл интервьюера - дальше не проходит.
какой смысл в бинарном поиске, если у тебя только один запрос на нахождение числа. Т.е ты и так считываешь массив за N, но зато для поиска одного элемента пишешь бин поиск) Из пушки по воробьям, кандидат не догоняет, не брать на работу.
у Кормэна 2 книги Основы алгоритмов и большая книга по алгоритмам. Обе хороши
У меня книга Кормена "Алгоритмы вводный курс" это третья книга этого автора? Или это и есть Основы?
Интервьюер надменный)
Хм "Научитесь кодить на бумажке, IDE развращает, нам это нужно что бы вы могли пройти наши тесты"
можно было бы разделить исходный массив на два - массив отрицательных чисел и положительных. Отрицательный перевернуть. В while проходимся пока не обойдем оба массива с двумя индексами под каждый. Сравниваем на каждой итерации квадраты значений по индексу и добавляем меньший.
Какое-то полурелигиозное «мы не учитываем место под выходной массив». Откуда оно взялось-то?
42:45 "Некорректно оценил сложность по памяти (линейная, а не константная)" Так ведь константная - это решение in-place ))
объясняет как оно у них считается на 1:24:50
1:25:52 Пример на 3 элементах довольно-таки вырожденный вариант, на котором сразу не очевидна симметрия, на более длинном примере уже можно увидеть 2 подмассива - левую и правую часть, которые необходимо смержить
Антон способен испепеллить самомнение любого раздутого сеньора-помидора за O(1) операций.
Компилирует когда моргает, дебажит когда дышит.
Студенты Яндекс.Практикума утверждают, когда в аудитории выключился свет, Антон положил руку на сетевой фильтр и все заработало, скомпилировалось, протестировалось и в Яндекс.Лавку улетели заказы на манговые смузи.
Собес с Антоном - единственное место в мире, где ты можешь почувствовать себя nullable объектом.
Ходит легенда, что однажды самый сильный в мире разработчик написал once-функцию, позволяющую делить на ноль. Когда она отработала, появился Яндекс. Говорят, этим разрабом был Антон.
Антон любит дождь, потому что в нем можно прятать слёзы неокрепших сеньоров, дошедших до алгоритмической секции и нахрен проваливших её.
Официально является GodObject-ом Яндекса.
Прошедшие и непрошедшие алгоритмическую секцию с Антоном живут в разных районах Силиконовой Долины.
Ну а если серьёзно, Антон - топовый прогер. Единственный человек, от которого ты искренне рад удостоиться похвалы за интеллект И! От которого не обидна никакая критика. Знакомство и работа с ним - лучшее, что может произойти в Яндексе, потому что таких профессионалов просто не найти. Я рад быть знаком с этим человеком.
Ну прям священная корова)
🤣
в попытках оправдать необходимость задач на алгоритмы в собеседованиях, особенно удалась параллель с рассомахай
нифига не easy)) первая задачка может да, но вторая задачка, как правило, уровня middle.
Не могу не оставить комментарий относительно задачи 1. Вся проблема кандидата это не знание указателей. Как только понимаешь что все алгоритмы разделяются на паттерны под эти алгоритмы то все выглядит проще. Паттерн только заметить надо.
Да, вспомнил про них, после подсказки. А когда дрочишь эти алгоритмы то всегда первым делом при работе с массивами пытаешь указатели применить
Я чет не понял а что там у интервьюера со сложностью по памяти - откуда там константа если не инплейс заполнение? Досмотрел до конца -
Интервьюер: «я бы мог решить эту задачу за 5 минут»
Ведущий: «как решить эту задачу inplace с той же сложностью»
Интервьюер: «никак»
В принципе все что нужно знать про интервьюеров Яндекса
01:32:45 Изменение индекса и одновременное обращение к массиву по этому индексу - НЕ ПРИНЯТ.
В коммерческом программировании код должен читаться (и проверяться на корректность) слету.
Сегодня пишем на одном языке, завтра на другом, а потом все это путаем и ловим ошибку полдня.
Никогда так не делайте!
Ляя, с прожаркой стейков угарнул)
я за 2 минуты решил на js, яндекс жди меня
Задача интересная. Интересно на сколько время давит на кандидата?
Обычное слияние двух отсортированных массивов. Первый - квадраты отрицательных чисел, второй - квадраты положительных чисел. Решается за один проход.
легкая задача для мида, даже с оглядкой на то что смотрят подход к методике решения, в институте и посложнее решать приходиться
Задачи было заготовлено 2. Вторая была сложнее
А как с5бя попробовать? Я трейни, но задачу решил поуверенее)))
Попробовать в чем?
@@AndroidBroadcastесли было заготовлено две задачи, тогда почему из получасового интервью отнимают время на вербальное объяснение решения интевьюеру? Почему задача изначально поставлена неполностью и интервьюер отнял время у собеседуемого на уточнение условий задачи про линейное решение?
@@flowname все было поставлено верно изначально. было сказано сделать оптимально по времени и по памяти
Не увидел в решении условия для массива с одинаковыми по модулю числами. Пример [-3, -2, 2, 3]
Двумя указателями идешь
Если числа равны, то разницы особой нет, ведь порядок не важен в каком они будут стоять
Что так, что так конечный массив будет 4 4 9 9
Мне как sql пареньку интересно решать такие задачи. На мой взгляд такие задачи дают важный урок: 1.не считай то что не нужно ; 2.используй все исходные данные для поиска ответа.
хорошая попытка , Я, но нет
Про то что задач хард не бывает на собеседованиях Яндекса это ложь, сам лично такую задачу решал, по крайней мере на LeetCode задача светится как Хард, возможно у Яндекса своя оценка задач
На алгоритмической секции - не бывает.
@@AntonRychagov А в бэкенде могут быть сложнее задачи? Или алгоритмическая секция во всех направлениях плюс минус одинаковая?
@@heybeachMIN просто одинаковая на всех направлениях
@@AntonRychagov а что вы под алгоритмической секцией понимаете? Для меня все 3 собеса Яндекса были по сути на алгоритмы
@@fromsiberia4985 есть предварительные секции, секции по специальности, архитектура и алгоритмы. На каждой, безусловно, могут быть алгоритмические задачи. Я говорю именно про последнюю, она более формализованная, чем остальные.
Не согласен с интервьюером, что видно, что человек много пишет, тк осмысленно именует переменные. Как раз кодит он мало, у него нет мышечной памяти элементарной, как минимум модули обозначаются как abs. Count названа некорректно, скорее pos. Плюс те же отступы, left != right и ряд других моментов
В исходном массиве есть максимальный элемент - последний. Берем цикл, первый элемент возводим в квадрат, если он становится больше максимального, то ставим его в конец - и так делаем с каждым элементом исходного массива. Сложность О(n). Верно?
а если не больше, то что?
Решение за квадрат выйдет так-то. Перебор всего массива (О(n)) + удаление первого элемента, а значит и дальнейший сдвиг массива (O(n)). Неэффективно, да и к тому же неверно.
Уровень требований должен соответствовать уровню предлагаемого заработка. А по факту яндекс не конкурент нормальным ИТ-компаниям. Потому и текучка там бешеная. Но всегда находятся талантливые стажеры которые поработают годик другой и пойдут дальше
"Нормальные IT-компании" - это кто?
@@AndroidBroadcast Прежде всего это компании откуда не хотят уходить через несколько месяцев )))
Саня молодец!
хз за решение, сделал за 5 секунд разбив массив по полам > 0 и
Первый алгоритм для котов или белок?
задача была поставленна некоректно сразу нужно говорить что массив сортированный имеет положительные и отрицательные числа и тд
теперь я понимаю почему в крупные компании не берут нормальных программистов.
Может ещё и решение? Я смотрел за процессом и задание было объяснено полностью нормально
Ведущий сразу же написал пример массива с отрицательным числом, хотя по хорошему, собеседуемый сам должен был догадаться или уточнить, внимательно прочитав условие
он же нписал условие задачи, или левая часть экрана не видна собесеуемому
а в чем прикол говорить что сложност ьпо памяти константная при том что как минимум для массива-ответа - линия.
Блин, такая простая задача, и человек, который работает уже несколько лет, так туго ее кодит... Делает костыли, такой кривой код... Что же он пишет в реальных задачах? Одну ошибку не заметил ни тот, кто писал, ни тот, кто принимал. В конце в костыле после цикла не нужны проверки левого и правого, там ссылка на одну ячейку, там надо просто писать последнее число в итоговый массив и все. Те, кто в комментах пишут, что алгоритмические тесты не нужны, ответ вам такой. Если у программиста проблема с мышлением, он будет писать плохо. Другое дело, что во многих решениях похрен на красивый код, грамотную реализацию, работает и нормально. Там обезьяну посади и она напишет, потому и не важно проверять на алгоритмы. А уметь думать могут далеко не все. Сколько кривого кода в результате получается, это мрак.
Я тоже пока смотрел, всё ерзал и офигевал, ну как так можно тупить. А потом подумал я то сидел на диване мне никто в ушал не нудел , не перебивал и не стучал по клавиатуре. И код я бы писал в IDE и там были бы все подсказки, и дебагинг на лету. И на месте этого парня бы тоже затупил.
Метод двух указателей. Сразу его не увидел к сожалению. Кто-то знает признак для определения задачи для 2 указатели? Сортировка?
Я бы сказал, да, если массив отсортирован, то тут или бинарный поиск, или 2 указателя
Неужели уверенного умения (не как на видео) решать задачи подобной сложности достаточно для попадания в Яндекс?
да нет конечно, это для хомячков ютубовских, чтобы руки не опускали и бегали в своем колесе)
алгоритмы яндекса на яндекс картах: "реальные пользователи ставят только 4 и 5" 1,2,3 ставят боты!
походу надо кодить молча, чтобы тебе минусов не наставили. В процессе написания решения для новой для тебя задачи всегда будет изначально грязное решение, которое в конце можно докрутить. А если решение знаешь, то просто пишешь самое оптимальное решение, которое люди придумали
const sortFunc = arr => {
let result = []
for(num of arr) {
const square = num * num
result.push(square)
}
return result.sort((a,b) => a-b)
}
оцените решение :)
На самом деле слишком усложнил)))) Можно было сделать сильно проще проверяя только что итератор записываемой позиции больше или = 0))
интересно в яше потом лог этот читают глазами или алгоритм лог анализирует и выставляет оценку?
никогда не видел чтобы насттолько подробный лог писали
Тот бородатый мужик настоящий хитрюга, я про то что он дал в самом начале отсортировать массив из трех элементов. Думаю если бы дали парню тому массив из 5 элементов, было бы проще найти решение.) В любом случае, мне было интересно рисовать решение на бумаге. )
Моё решение:
orderTwo(arr[ ]) {
L = 0
R = arr.len - 1
dump [ ] = new arr[arr.len]
for cur = arr.len - 1; 0 < cur; cur--;
if abs(arr[L]) < abs(arr[R])
dump[cur] = arr[R] * arr[R]
R--
else dump[cur] = arr[L] * arr[L]
L++
show(dump[ ])
}
а в этом языке список на чём основан? просто в шарпе список на основе массива сделан и он расширяться будет с затратами, если массив большой и не задать лист изначально по размеру
Скиньте ссылку на задачу в литкоде.
977 задача
@@kalin5150 thx
мда, как он столько лет програмировал и ноль идей по решению.. странно..
getX2array - неверное название. X2 это *2
01:24:26 Крайне сомнительная тема с константной сложностью алгоритма по памяти.
По определению, емкостная сложность алгоритма - это сколько памяти алгоритму требуется в процессе работы.
Алгоритм в процессе работы создает выходной массив.
Не до своей работы, не после своей работы - во время своей работы.
Значит, алгоритму для работы нужно линейное количество памяти.
Если поставить другую задачу: разрешено модифицировать входной массив, то это другой алгоритм с константной сложностью по памяти.
Продублирую ответ двухмесячной давности: "Это холиварный вопрос. Прочитав на stack exchange вопрос под номером 83586 можно получить ответ почему именно. На собеседованиях я специально уточняю, что меня интересует именно дополнительная память, потребляемая алгоритмом, а не какая-то абстрактная память, чтобы не было двусмысленности. На этом собеседовании я сделал так же :)"
@@AntonRychagov > вопрос под номером 83586
На SE не нашлось. Там есть разделы - если там, то в каком разделе?
На SO также не нашлось.
@@AntonRychagov В дополнение к моему прошлому ответу. Я нашел какое-то обсуждение на SE в разделе cs номер 156949, еще видел обсуждения на SO.
Так вот, там обсуждается: включать ли ВХОД алгоритма в емкостную сложность.
В обсуждении на SE 156949 приводится ссылка на книжку ОРейли "Hands-On Data Structures and Algorithms with JavaScript by Kashyap Mukkamala"
Space complexity and Auxiliary space
Space complexity and Auxiliary space are two of the most often confused and interchangeably used terms when talking about the space complexity of a certain algorithm:
Auxiliary Space: The extra space that is taken by an algorithm temporarily to finish its work
Space Complexity: Space complexity is the total space taken by the algorithm with respect to the input size plus the auxiliary space that the algorithm uses.
--
то есть НИГДЕ не обсуждают, включать ли ВЫХОД алгоритма в емкостную сложность. Разговоры только про ВХОД, а про ВЫХОД всем понятно (что надо включать, потому что выход формируется в результате работы алгоритма)
Может, ты что-то перепутал?
("ты" - ну это как в яндексе и в интернетах принято)
@@vitaly1461 Я как раз спрашиваю про Auxiliary Space Complexity.
В любом случае, несмотря на то, что Саша на интервью ответил некорректно на этот вопрос, я увидел, что он понимает, как именно считается Space Complexity, а это главное. Я бы не стал снижать ему за это баллов, если бы это было реальное собеседование.
@@AntonRychagov Почему-то твои ответы ютуб часто прячет.. каким-то образом получилось увидеть, а теперь снова не видно.
Из ответа я понял, что ты не вникал в суть моего сообщения.
Просто обрати внимание, что никто не обсуждает объем выхода.
Обсуждают: 1) объем входа 2) объем памяти в процессе работы алгоритма 3) общий объем памяти.
В цитате из книги ОРейли не обсуждается объем выхода.
Вопрос - Как думаешь, почему не обсуждают объем выхода?
Я уже отвечал на этот вопрос. Попробуй теперь ты.
(обсуждение 83586 недоступно, про это я писал, не знаю что там)
Лучше бы брали всех подряд, может, качество сервисов улучшится (почта, диск, браузер)
Программист проявил смелость, конечно. Но кажется, что не из-за волнения он так плохо справился. Не понимаю, как с тремя годами опыта можно так... тормозить
Сверхразум Dmitry в чате решил с O(1) по памяти =)
После этого видео расхотелось даже идти на собеседование в Яндекс. Ну вот представьте вы натренировались на собес, вас взяли на работу, а потом с этим каждый день работать, и вместо arr.map().sort() писать такие портянки? Ну нафиг, где тут удовольствие от работы?))
не понял а что сложного в задаче? обычный цикл на питоне который перебирает массив и создает новый упорядоченный массив чисел возведенных в квадрат
хомячок детектед даже условие не понимаем, даже с удачным примером
молодец что понял, наверное очень горд собой?)@@Viacha-wo3lb
@@vladimir7759 я не горд, мне скорее стыдно за вас, вайтишников с ICQ 80
Какая же токсичная духотища...
На мой взгляд можно сколько угодно восхищаться супер крутым пилотом болида, но если он не знает хотя бы на примитивном уровне как работает ДВС, то это смешно. Можете сколько угодно гонять свои JSONчики от сервера к клиенту и называть себя крутыми программистами
А можно в идеале знать как устроен ДВС до мельчайшего винтика, и при этом каждый раз глохнуть на светофоре. Если условное приложение работает, и приносит бизнесу деньги, то уже не важно какое О от N занимает написанный алгоритм
мои решения C#
public static int[] SquareNums(int[] nums)
{
var res = new int[nums.Length];
for(int i = 0; i < num.Length; i++)
res[i] = nums[i] * nums[i];
Array.Sort(res);
return res;
}
public static int[] SquareNums(int[] nums)
{
var res = new int[nums.Length];
int index = nums.Length - 1;
int leftPtr = 0, rightPtr = nums.Length - 1;
while(leftPtr nums[rightPtr])
{
res[index] = SqrNum(nums[leftPtr]);
leftPtr++;
}
else
{
res[index] = SqrNum(nums[rightPtr]);
rightPtr--;
}
index--;
}
return res;
static int SqrNum(int num) => num * num;
}
А с каких пор отрицательное число в n степени становится положительным?
Но с тех пор как умножается на другое отрицательное число :)
школу меньше прогуливать надо было😂
Да я многое позабыл после школы))@@sparrowwin
Мне одному показалось, что задача была сортернуть в итоге? Судя по алгоритму он работает для [-3,2,4] но если расширить входные данные, он уже не работает. По ощущению тут не было ни нормальной задачи, ни нормальной оценки кандидата... Тут кандидата по моему просто валили... Нет таких сортировок строго за O(n) только если в лучших случаях (Что и было реализовано в данном видео)... Смотрел и недоумевал че тут вообще происходит... Яндекс такой яндекс...😂😂😂
Все тут работает, просто ты не соображаешь немного
@@7Denial7 Бесполезный ответ. Ага, сспасссибо!😅
@@Rodeon10 запусти код не в голове, а на компе, и скажи что здесь может не работать
@@Rodeon10 твои смайлики только подтверждают твой icq(
Я ни разу не программист, я химик-технолог. Но интересовался. Мне кажется, что тут дело не в алгоритмах, а в обычной логике. Человек проигнорировал/не заметил, что изначальный массив был отсортирован. После этого надо было заканчивать интервью. Даже я это понимаю, хотя сильно не уверен, что смог бы написать конкретный код.
Химик-технолог добавил свои 5 копеек)