Задача на Логику из Собеседования в Amazon

preview_player
Показать описание


Разбираем задачу из собеседования в Amazon на middle разработчика в Берлин. Главное в ней - это придумать решение, а сам код пишется буквально в несколько строчек.
Рекомендации по теме
Комментарии
Автор

Решил сразу после того, как Александр показал решение.

zudwa
Автор

Классическая ситуация когда придумываешь сложное решение а тут всё так просто

RAZRAB-dev
Автор

кажется, это первая задача, которую я смог решить самостоятельно, причем очень быстро
плюс мораль от таких видео, спасибо!

vorobey
Автор

5:06 Поправка: решением будет не "сумма модулей всех элементов минус модуль самого маленького числа", а "сумма модулей всех элементов минус ДВА модуля самого маленького числа". Это "самое маленькое число" тоже присутствует в "сумме модулей всех элементов".

evgenijb
Автор

Офигеть, я бы не догадался до решения. Спасибо, Саша

artyomzolotoverkhov
Автор

1) Спасибо за контент! Тебя очень интересно смотреть)

А у меня случилось то самое чувство, когда пришёл домой очень сильно пьяный с позавчера, и решил задачу с собеседования в it-гигант первым же способом, который пришёл в голову - посчитать количество отрицательных, если четное, то наверняка будет способ превратить всех соседей в четные. Если нечетное количество отрицательных, значит находим наименьшее в матрице, и оно будет единственным отрицательным. Таков быстрый ответ без проверки. Потом ещё пару минут на паузе проверял своё предположение, и в итоге оказался прав))

И вот то самое чувство в том, что бухой я случайно с первой попытки мгновенно решил задачу на логику от его величества Amazon, а в реальной жизни я 2 года что-то там пишу на питоне и мне вообще не светит такая

iJaVolo
Автор

Саша, ты светлая голова! Удачи тебе. Сыну показываю твои задачи. Не все догоняет, но схватывает некоторые идеи.

ps-
Автор

Действительно, всё просто, но не просто! Очень интересно было)

YuriiLutsyk
Автор

Единственная задача на твоем канале, которую я решил в уме быстрее, чем закончилось видео 😆

neruinfo
Автор

Интересная задача, ты всегда очень хорошо объясняешь. Лайк.

panfilovandrey
Автор

поняла условие задачи, когда увидела решение.
до этого думала, что нужно написать алгоритм, который будет выполнять эти самые преобразования и приведет матрицу к искомому виду за минимальное количество итераций)
уже почти алгоритм составила)

kaily_kain
Автор

Решение на 4, но не на 5. Есть 4 оптимизации которые можно сделать. Чтобы работало для произвольных чисел и быстрее:
1) Не производить подсчет negactiveCount, а создать болевую переменную oddNegative = false и побитово присваивать oddNagative = !oddNegative каждый раз когда встречаешь отрицательное число
2) Изначально min присвоить нулю (в случае пустой матрицы) или модулю matrix[0][0]
3) sum может выйти за пределы int очень легко, нужно использовать bigint (судя по стилистике, это Java code)
4) 2-ды вычисляется Math.abs(num) можно это значение присвоить отдельной переменной

yzhishko
Автор

Решил задачу сам, пойду подам CV в amazon

Fact-Frenzy.
Автор

Берём самый верхний минус, если таких несколько, то самый левый из них. От него можно избавиться, если это не элемент в правом нижнем углу, причём так, что знаки элементов выше рассматриваемого и левее рассматриваемого в его строке останутся положительными. Тогда в зависимости от чётности числа отрицательных чисел в конце получим, что все числа положительны (тогда задача решена), либо в правом нижнем углу число с отрицательным знаком, тогда будем менять знаки по цепочке от него до самого маленького по модулю числа. Если в исходных данных есть 0, то его можно рассматривать как число любого знака, и тогда ответ - сумма модулей всех чисел.
То есть:
1) если есть 0, то ответ - сумма модулей элементов матрицы
2) если нет 0, и количество отрицательных чисел чётное - сумма модулей элементов матрицы
3) если нет 0, и количество отрицательных чисел нечётное - сумма модулей элементов матрицы минус 2 модуля наименьшего по модулю элемента

МаксимАндреев-щб
Автор

красава жду ещё подобных приколов а ещё если есть просто какой-то задачник или книга было бы круто

dlcgaming
Автор

Можете меня поздравить, я видимо гожусь на работу в Амазон.
А вообще, что это за задача? - уровень начальной школы. И код здесь написать несложно, даже если ты полный чайник. Просто более скилловый программист сделает его куда эффективнее. Даже я со своим ультра-базовым Java, который проходил, когда думал учиться на программиста, смог бы решить задачу и написать код.

ASUSUA
Автор

Задачку решил и горд собой, но от меня почему-то ускользнуло, что нам важно лишь итоговое число, и поэтому я честно написал алгоритм преобразования матрицы🙈

ФёдорПоцелуев-йс
Автор

простоя задача на инварианты. вообще ничего сложного
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))

ДмитрийПименов-жш
Автор

Полезно. Но я бы вместо счетчика отрицательных сделал бы просто булево isNegativeLeft = false и в цикле просто в условии негативного значения isNegativeLeft = !isNegativeLeft. Ну и как по мне дважды брать по модулю не имеет смысл. Можно просто значение min = INT_MIN и в том же условии по негативному значению брать максимум между min и текущим значением матрицы. Ну и в конце нужно два мин прибавить (в моем случае мин отрицательное всегда)

TheKrivetko
Автор

Я бы по своей логике изначально посчитал четное или не четное количество минусов. в случае если четное мы сможем от них избавиться. если не четное то 1 минус всеже останется. и нужно сделать так чтобы это был минимальный по значению элемент. и от этого уже построил 2 алгоритма

msfxojn