Тёмный
Саша Лукин
Саша Лукин
Саша Лукин
Подписаться
Живу в Лондоне, разрабатываю Android в Google, делаю обучающий контент.
Комментарии
@ПаблоЭскобар-л8щ
@ПаблоЭскобар-л8щ 5 дней назад
Спасибо за разбор задач, очень прокачивают. Угарнул с того, что на литкод добавили тест k = 0, nums =[1]. При моей реализации ответ выходит один, думаю, как разобрать этот случай
@lavonov
@lavonov 12 дней назад
Можно бы за O(N²), если только память ограничена, это первое, что пришло в голову
@ЕвгенийП-д8л
@ЕвгенийП-д8л 14 дней назад
Очень лëгкая задача. Концепт решения верный, а прога не работает. Нет проверки на выход за границы доски, предыдущий слой не нужен, нужно шаги до всех ячеек хранить и лучше это делать в матрице. Ячейка может оказаться недостижимой и при такой реализации прога зациклится.
@dmitrypolyakov5708
@dmitrypolyakov5708 14 дней назад
Удачи в переезде в Нью Йорк, Алекс!
@ksushakiseleva2644
@ksushakiseleva2644 15 дней назад
Прекрасный разбор! Спасибо!
@Артёмфомин-ш1ы
@Артёмфомин-ш1ы 16 дней назад
аааа зачем уровни массив постоянного размера очередь размером в поле и ячейка ввиде структуры (visited, from, steps) и просто перебираешь каждую ячейку из очереди при переборе добавляются новые как только достал из очереди новую ячейку то проделываешь с ней все действия проверяя в начале на visited и в конце проверяешь, если это target, тогда пишешь ответ, но продолжаешь досчитывать, чтобы в последствии можно было использовать данный массив для нахождения количества шагов до любой ячейки от того же самого положения коня за O(1), просто ткнув в этот массив пальцем, а там уже будет ответ в поле steps у ячейки а если случится такое что у тебя в очереди закончились ячейки то говоришь что пути нет в итоге работает даже для не ровного поля и с островами а очередь размером в поле потому что возможно построить поле где в стеке будет лежать больше половины ячеек
@raphaelosipov867
@raphaelosipov867 17 дней назад
Отлично преподнесено, правда. Но, можно идти на следующий уровень, и рассказать, как видя задачу, определить, что она на ДП
@lagert5302
@lagert5302 19 дней назад
Я очень редко пишу комментарий,но Боже,какое же это крутое видео!Я много читал про хэширование и про хэш-таблицы,но ничего не помогло мне понять это ,как это видео,я буквально прозрел!Спасибо ,бро,долгих лет тебе жизни
@TheKrivetko
@TheKrivetko 19 дней назад
Полезно. Но я бы вместо счетчика отрицательных сделал бы просто булево isNegativeLeft = false и в цикле просто в условии негативного значения isNegativeLeft = !isNegativeLeft. Ну и как по мне дважды брать по модулю не имеет смысл. Можно просто значение min = INT_MIN и в том же условии по негативному значению брать максимум между min и текущим значением матрицы. Ну и в конце нужно два мин прибавить (в моем случае мин отрицательное всегда)
@Павел-у7ф2е
@Павел-у7ф2е 19 дней назад
Алгоритм называется Rabbit and Turtle. Думаю, для тех кто прорешает 500 задач на лит коде рано или поздно на нее наткнется, таким образом просто проверяется количество решенных задач. И таких алгоритмов много, например есть список чисел, которые встречаются по 2 раза и одно число только 1 раз, без дополнительной памяти. Пытался решить эту задачу 1 неделю и специально не смотрел решение. После 1 недели понял что не могу решить и посмотрел. В результате этой задачи, усвоил урок, что нужно учить максимально большое количество алгоритмов, и отрабатывать их на лит код, а не пытаться изобрести велосипед 500 раз))))
@Link-g7p
@Link-g7p 20 дней назад
Здравствуйте, подскажите, пожалуйста в 1 задаче… как метод maxPathSum понимает, что нужно складывать числа старших детей, а не младших? Ведь мы логику никакую не пишем после проверки на null. Туплю немного) Заранее благодарю ! int maxLeftPath = maxPathSum(root.left) как код считает старших детей в левой части? 🙏
@Legenda_2K17
@Legenda_2K17 22 дня назад
Те кто пишут что они смогли это решить легко это как? Я конечно абсолютно не разбираюсь в программировнии, но даже если просто искать решение без программировния я бы никак это не сделал. Единственная идея у меня была когда он сказал, что тут простое решение это просто вокруг кажого минусового числа найти самое маленькое плюсовое и поменять местами. Ну это icq150+ наверное надо для решения
@johndoe20975
@johndoe20975 22 дня назад
Это Алгоритм Флойда. Решал я эту задачу на литкоде и если не знать решение, то практические нереально решить ее на собесе.
@Срун
@Срун 23 дня назад
Легкая же, я сразу посчитал количество чисел с минусом, их четное, просто свести минусы все вместе и сократить
@АлександрКоновалов-ш1н
Чёт прям подозрительно легко
@remonterkz-6062
@remonterkz-6062 24 дня назад
как именно проверить эту программу в действии?
@remonterkz-6062
@remonterkz-6062 24 дня назад
6:50 На каком именно шаге мы прибавили в сумму значение min?
@sandayang233
@sandayang233 27 дней назад
ждите меня там же скоро еще годик в егэленде пятак в вузе и я там хываывха
@DmitryDook
@DmitryDook 27 дней назад
ывахывах неплохие планы егэленд точно поможет осуществить
@arturio10
@arturio10 29 дней назад
кайф просто! спасибо за такие задачи! просто логически разбивая (также у себя на доске в комнате) на квадраты 2х2 и решил реально за минут 15! да и (псевдо)код реально тут простой P.S. насчет sum - 2m не догадался сам, только после просмотра видео k = 0 m = M[0, 0] s = 0 for i = 1... m: for j = 0 ... n: e = M[i, j] if (e < 0) k = k + 1 if (|e| < m) m = |e| s = s + |e| return (k mod 2 == 0) ? s : s - 2m
@nighthunter28
@nighthunter28 29 дней назад
те кто решал егэ по профильной математике под номер 19 решат эту задачу за несколько секунд
@BBoh-q9h
@BBoh-q9h Месяц назад
Жду каждое твоё видео!!
@ТимурЗакуанов
@ТимурЗакуанов Месяц назад
Я бы по своей логике изначально посчитал четное или не четное количество минусов. в случае если четное мы сможем от них избавиться. если не четное то 1 минус всеже останется. и нужно сделать так чтобы это был минимальный по значению элемент. и от этого уже построил 2 алгоритма
@tusman4ik
@tusman4ik Месяц назад
С лету догадался.. Спасибо олпроге, хоть где-то пригодится..
@-X-Ray-
@-X-Ray- Месяц назад
Классная задача, спасибо за рассказ
@JavaDevOld
@JavaDevOld Месяц назад
Я бы задал уточняющий вопрос "Является ли стэк дополнительной памятью. " Ответ простой. Стек - он есть всегда, работает быстрее в разы, чем манипуляции с указателями, И он есть всегда - у любой проги есть стек, он нахрен дополнительно не выделяется, он выделяется системно, он работает чрезвычайно быстро, и ему блин похеру, чего мы туда запихиваем, указатели или еще чего-нибудь еще.... (Честно скажу, что ящик пива туда запихать не пробовал. Если есть те кто пробовал, прошу поделиться опытом. )СПС.... Честь Гуглу - дитю , замученному ЕГЭ...
@kaily_kain
@kaily_kain Месяц назад
поняла условие задачи, когда увидела решение. до этого думала, что нужно написать алгоритм, который будет выполнять эти самые преобразования и приведет матрицу к искомому виду за минимальное количество итераций) уже почти алгоритм составила)
@ДмитрийПименов-ж5ш
простоя задача на инварианты. вообще ничего сложного import numpy as np def max_matrix_sum(x): x = np.array(x) return np.sum(abs(x)) if np.sum(x < 0) % 2 == 0 else np.sum(abs(x)) - 2 * np.min(abs(x))
@alexzk3
@alexzk3 Месяц назад
Сильно все сложно, std::accumulate(begin, end, 0u, [])(auto a, auto b){return abs(a) + abs(b);});
@Cittcattf
@Cittcattf Месяц назад
Александр у вас прекрасный канал❤ Но хотелось бы больше узнать л вашей биографии, пути и тп Удачи!
@vasilyh4588
@vasilyh4588 Месяц назад
Как уже задолбало это "то как вы думаете".... Нормально мы думаем. Головой. 99% HR и вот таких вот проверяльщиков - не способны сделать выводы из этого маталгоритмического теста. Человек не умеющий их решать и не видящий за ними смысла - может быть лучшим специалистом, чем тот, кто умеет. У меня знакомый был - задачки решал на загляденье, а программер никакой вышел - пришлось уходить в Scrum masterа. А если человек знает ответ - тогда что тестируется? Он сразу проходит, как "умеющий решать" читер? P.S. По решению: Придумал, сразу после времени 3:10. Мы можем менять знаки у двух числе как угодно долго - ну так нафига вообще это делать? Мы же можем опустить эту операцию как "ничего не значащую" (нам не интересно как долго мы это будем делать, главное, что мы - можем это делать). Выравниваем все элементы в массив и сортируем по модулю от минимума к максимуму, высчитывая при этом количество минусов. 1. Если количество минусов чётное - мы просто суммируем все элементы по модулю. Потому что рано или поздно - мы придём к тому, что все будут положительными. 2. Если количество минусов НЕ чётное - мы суммируем все элементы и вычитаем из них первый самый маленький (то бишь прибавляем минус минимальный элемент по модулю), т.к. после всех смен - останется ровно 1 минус, от которого никак не избавиться. И получается - сама по себе матрица тут нафиг не нужна.
@OleksandrKucherenko
@OleksandrKucherenko Месяц назад
what should we do with the 0 (zero) ? minus ZERO, does not exists, so if we found ZERO in matrix - we should return SUM of all ABS items
@nyb2153
@nyb2153 Месяц назад
на кого не посмотри, один в гугле, другой в амазоне итд откуда такие задачи простые на собесах в такие компании? это задача на уборщика туда?
@joyniferzagher9871
@joyniferzagher9871 Месяц назад
Это кстати носит более распространенное название -- "метод двух указателей"
@perceptron9834
@perceptron9834 Месяц назад
Brute force это сила 😊
@perceptron9834
@perceptron9834 Месяц назад
Дошло только после простых примеров 😊
@mariastarkova9317
@mariastarkova9317 Месяц назад
Вообще не понимаю как эти задачи решать. Смотрю только потому что парень нравится.
@barabucho
@barabucho Месяц назад
Что не видео,то курс...
@ЮраВолченко-у8г
@ЮраВолченко-у8г Месяц назад
Как код работает если в матрице все элементы по модулю больше 1000_000_000?
@alexanderspeshilov839
@alexanderspeshilov839 Месяц назад
Если вы про выбор начального значения min, то с одной стороны - да, стоило взять что-то более обоснованное (максимальное значение типа int или первый элемент матрицы, например). Но в данном случае этот выбор не влияет на корректность кода. Для почти всех нетривиальных матриц, а точнее для матриц с общим количеством элементов больше 2, раньше сломается суммирование. А это только случаи матриц 2х1 и 1х2. Для матрицы 5х5 - а именно так было в исходной задаче - если минимальное по модулю число больше 85_899_346, то уже переполнение при суммировании будет.
@MrJloa
@MrJloa Месяц назад
Видимо мы думаем по-разному. Двигаемся с 0,0 по главной диагонали пока значение ячейки не станет больше искомого (17) Далее просто проверяем все значения строки, столбца (17).
@mukaddastaj5223
@mukaddastaj5223 Месяц назад
Это шикарно. Спасибо огромное, помог как никто. Я и статьи читала и у учителя одного спрашивала, никто так нормально и не объяснил
@psevdonim257
@psevdonim257 Месяц назад
Кто решил эту задачу- молодец, но это Одна из многих и на многих собеседованиях , и на те собеседования надо еще попасть, короче это как пробежать быстро 100 метров и надеяться что эта же скорость будет у вас на марафоне😂
@МихаилГоловин-щ7ж
@МихаилГоловин-щ7ж Месяц назад
Классная задачка! Спасибо!
@leonidkazak1918
@leonidkazak1918 Месяц назад
Саша Лукина, как дела? Как дела, Оля Лукина?
@natsurukasumi3370
@natsurukasumi3370 Месяц назад
Цікава та корисна задача, дякую)
@Mcsollo
@Mcsollo Месяц назад
Я еще по превью в видео понял как это решить, меня возьмут в амазон?
@АндрейЛарионов-ж3э
Я не знаю насколько низкий iq нужен чтобы придумывать решение больше 2 минут. Решение придумал секунд за 12+-. И так очевидно, что любую пару отрицательных чисел можно сделать парой положтельных. И сразу после этого очевидно, что нужно сделать отрицательным число минимальное по модулю. Также очевидно, что если в матрице есть 0, то можно сделать матрицу без отрицаельых чисел. Программу написал за 3 минуты.
@CarlJohnson-y5j
@CarlJohnson-y5j Месяц назад
С одной стороны, круто. С другой, такие гении, решающие абстрактного коня в вакууме, весьма тугие в бизнес-задачах, наши HR не задают таких вопросов из-за их бесполезности.
@user-wk9tu7rt2t
@user-wk9tu7rt2t Месяц назад
Решил ещё на этапе превью. Посмотрел и убедился, что всё действительно просто. Код не оптимален, но пойдёт.