Задача из Собеседования на 160,000 Евро в Год

Разбираем популярную задачу, которую спросили у моего знакомого на собеседовании на позицию Senior Software Developer в Берлине.
После успешного прохождения нескольких собеседований, ему предложили зарплату в 160.000 евро в год.
Задача состоит в поиске двух чисел из отсортированного массива, в сумме дающих заданное число.
00:00 Вступление
00:54 Условие задачи
02:09 Перебор всех пар
03:38 HashSet
06:11 Бинарный поиск
09:49 Два указателя

Пікірлер: 1 900

  • @sashalukin
    @sashalukinАй бұрын

    Создал Telegram канал, в котором рассказываю о жизни в Лондоне, работе в Google и подготовке к собеседованиям. Подписывайтесь: t.me/saschalukin

  • @user-tp8ku2hp9u
    @user-tp8ku2hp9u2 жыл бұрын

    -1 и 8 тоже дадут 7 :)

  • @sashalukin

    @sashalukin

    2 жыл бұрын

    Хехе, точно, не заметил :)

  • @semchic888

    @semchic888

    2 жыл бұрын

    @@sashalukin а я увидел, но так как профан, подумал что не все условия увидел)))

  • @sashalukin

    @sashalukin

    2 жыл бұрын

    Так, закреплю коммент, чтобы все увидели) В начале в первом примере тоже два ответа и тоже можно вернуть любой из них. Круто, что заметили :)

  • @FariusFriends

    @FariusFriends

    2 жыл бұрын

    ток хотел написать

  • @user-qm7pl3ez4s

    @user-qm7pl3ez4s

    2 жыл бұрын

    @@sashalukin я конечно не программист, но почему нельзя например из непосредственно результата "К" начать вычитать числа и сравнивать их с предложенными?

  • @vladnykytenko8394
    @vladnykytenko83942 жыл бұрын

    Очень рад, что вы вернулись.

  • @dashkarandash4217
    @dashkarandash42172 жыл бұрын

    очень интересный материал, спасибо =) хотелось бы больше подобных видео

  • @fedot0ff
    @fedot0ff2 жыл бұрын

    Комментарий в поддержку канала. Автор, ты молодец, спасибо за труд!

  • @ruslanabishev
    @ruslanabishev2 жыл бұрын

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

  • @user-qz3kw1xd6v
    @user-qz3kw1xd6v2 жыл бұрын

    Хорошее объяснение и понятный код, спасибо. Ждём ещё, удачи в развитии!

  • @Wild6-8
    @Wild6-8 Жыл бұрын

    Здравствуйте, давно увидел ваше видео в рекомендациях и жалею что не посмотрел ранее. Спасибо за контент👍

  • @jury2753
    @jury2753 Жыл бұрын

    Супер!!! Спасибо огромное, за классное видео. 👍👍👍

  • @user-hj2es2vj6p
    @user-hj2es2vj6p2 жыл бұрын

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

  • @user-sp5fv4kw2n

    @user-sp5fv4kw2n

    Жыл бұрын

    Почитай Вирта: Структуры и Алгоритмы, целый мир откроешь

  • @Rewsbt
    @Rewsbt2 жыл бұрын

    Наконец то вы вернулисссссьььььььь

  • @andreipopov2700
    @andreipopov2700 Жыл бұрын

    Классное видео. Автор все очень доступно и понятно объясняет. Саше спасибо большое за труд и терпение к "диванным ворчунам" )))

  • @grbak
    @grbak Жыл бұрын

    Топ-видос! Посмотрел и сохранил в один из своих плейлистов еще в феврале, но вернулся и разобрался в последнем варианте решения только сейчас, когда твердо решил апнуть скилл в решении задачек (наткнулся на эту задачу на leetcode). Оказывается, лучшее решение не такое уж нетривиальное, как показалось на первый взгляд

  • @Gremelka9
    @Gremelka92 жыл бұрын

    С возвращением) спасибо за ролик)

  • @akella512
    @akella5122 жыл бұрын

    Рад, что появилось свежее видео. Интересная задача и подходы к ее решению, доступное объяснение👍💪

  • @Sashikx_zxc
    @Sashikx_zxc Жыл бұрын

    Снимай пожалуйста ещё ролики. У тебя очень хорошо получается. Очень познавательно!!! Спасибо!!

  • @staspanyukov4822
    @staspanyukov48222 жыл бұрын

    Отлично объясняешь! Выпускай почаще видео)

  • @kovsaw
    @kovsaw2 жыл бұрын

    Очень круто, спасибо за видео!

  • @user-lu9gz7yf2v
    @user-lu9gz7yf2v Жыл бұрын

    Надо в собеседовании ввести задание, чтоб и пытуемый посчитал пальцы на правой руке, затем на левой, а затем назвал общее количество пальцев на обеих руках.

  • @pontypilat_0338

    @pontypilat_0338

    Жыл бұрын

    Ппфф легко же. 5 на левой, 5 на правой, значит общее количество 25

  • @Bartolph

    @Bartolph

    Жыл бұрын

    @@pontypilat_0338 разве не 30?

  • @carbonara_13

    @carbonara_13

    Жыл бұрын

    изи, 55

  • @MiroSlave1

    @MiroSlave1

    Жыл бұрын

    @@carbonara_13 ты меня опередил

  • @SmihoTvor_lite

    @SmihoTvor_lite

    Жыл бұрын

    @@carbonara_13 а разве не жолтый?

  • @igorratnik2357
    @igorratnik23572 жыл бұрын

    Спасибо. Доходчиво:) Подписка однозначно за годный контент:)

  • @alexeybubakov6885
    @alexeybubakov68852 жыл бұрын

    Спасибо! Очень интересно. Подписался. Буду ждать новых видео

  • @tomysmit5386
    @tomysmit53862 жыл бұрын

    Очень круто, ждем еще интересных и реальных задачек)

  • @COOKIEMONSTER90

    @COOKIEMONSTER90

    Жыл бұрын

    Мне вот эта задача по математике понравилась. Бородатая и не совсем айтишная, но может будет интересно :) Встречаются два приятеля - математика: - Ну как дела, как живешь? - Все хорошо, растут два сына дошкольника. - Сколько им лет? - Произведение их возрастов равно количеству голубей возле этой скамейки. - Этой информации мне недостаточно. - Старший похож на мать. - Теперь я знаю ответ на твой вопрос. Сколько лет сыновьям? (Ответ логичный и однозначный)

  • @user-er9hm1vg6f
    @user-er9hm1vg6f2 жыл бұрын

    Браво! Ваши видео просто замечательные! Продолжайте в том же духе! Хотелось бы узнать больше «инсайдерской» информации, как человеку, которому только предстоит работать :)

  • @nikolaifaist

    @nikolaifaist

    Жыл бұрын

    Ещё не работаешь в этой сфере?

  • @denismerigold486
    @denismerigold486 Жыл бұрын

    Cпасибо за интересную задачу! хочу ещё!)

  • @withotsoul7252
    @withotsoul7252 Жыл бұрын

    Спасибо за видео! Очень интересная задача 👍👍🔥🔥🔥🔥

  • @justfairytale5722
    @justfairytale57222 жыл бұрын

    Решал такую на литкоде методом двух указателей left, right как раз. Спасибо за видео

  • @alarmolord

    @alarmolord

    Жыл бұрын

    Я даже не поленился и нашёл. Может кому-то интересно будет порешать такую задачу на leetcode. Задача с уровнем easy (на вход дан неотсортированный массив) "1. Two Sum". И ещё одна похожая задача уровня medium "167. Two Sum II - Input Array Is Sorted" (на вход дан отсортированный массив).

  • @alxndrnz
    @alxndrnz2 жыл бұрын

    Ура, вернулся :)

  • @bigtreeSSS
    @bigtreeSSS Жыл бұрын

    Круто и интересно, обязательно продолжай.

  • @user-nb3gw2zf8n
    @user-nb3gw2zf8n2 жыл бұрын

    Прекрасная подача. Так держать!

  • @user-hn3mq8dp5r
    @user-hn3mq8dp5r2 жыл бұрын

    Спасибо, так просто о сложном. Вы талант. Надо клон сделать и учителем в школу.

  • @user-xw8ur4sc6t
    @user-xw8ur4sc6t2 жыл бұрын

    лукас не глядя. давно ждал возвращения))

  • @user-us9os1gp5y
    @user-us9os1gp5y2 жыл бұрын

    Ураа,ждал твоих роликов давно)

  • @yanazork
    @yanazork2 жыл бұрын

    Это было очень интересно!)

  • @lestwa4265
    @lestwa42652 жыл бұрын

    Я сначала не поняла решение с двумя указателями, а потом по коду как всё поняла. Очень интересно и хорошо рассказано, пасеба!

  • @kriguitar4753
    @kriguitar47532 жыл бұрын

    8:44 - тут лучше определить, что является входом и что является выходом нашей части, отвечающей за бинарный поиск и вынести наш бинарный поиск в отдельный компонент. Это как упростит чтение и понимание кода, так и сделает код более модульным. По сути тут происходит тоже самое что и в "HashSet"

  • @usernamer519
    @usernamer519 Жыл бұрын

    очень интересное и понятное объяснение, топ. спасибо!

  • @rinat_nur
    @rinat_nur2 жыл бұрын

    Приятно слушать - классная подача

  • @marksreider7645
    @marksreider76452 жыл бұрын

    Спасибо, круто!

  • @sinsinegobaffa7321
    @sinsinegobaffa73212 жыл бұрын

    Довольно простое задание, как мне показалось, наверное потому, что во многих заданиях, даже простых( на строки, например ) нужно идти с двух сторон.

  • @nurlybekmardanov5486
    @nurlybekmardanov54862 жыл бұрын

    Рад, что ты вернулся!

  • @titanovsky
    @titanovsky Жыл бұрын

    Спасибо большое, скоро приступлю к таким задачам)

  • @VPmagicshow
    @VPmagicshow2 жыл бұрын

    Оооочень круто!

  • @gitarre_spielen
    @gitarre_spielen2 жыл бұрын

    Впервые столкнулся с вашим каналом. Смотрю на обложку, на название ролика и совсем не понимаю: а что тут сложного, это ведь решит даже ребёнок! Стал смотреть, а здесь оказалось программирование, тогда понятно стало. Забавно. Ролик интересный, подача грамотная, успехов!

  • @user-xp8zi5bs1d
    @user-xp8zi5bs1d3 ай бұрын

    Спасибо! Очень интересно и полезно🎉

  • @user-wq4fc8zv9i
    @user-wq4fc8zv9i2 жыл бұрын

    Мужик,твой материал на таком легке заходит,учу js,до такого уровня ещё не дошел,но о чем ты рассказываешь понятно,и заходит лайтово, спасибо за труд !

  • @user-yd2wm6gt5k

    @user-yd2wm6gt5k

    2 жыл бұрын

    Удачи тебе,юный подаван.

  • @AlexZvukov
    @AlexZvukov2 жыл бұрын

    Просто очередной комментарий про то, что надо микрофон-петличку 😉 В целом огонь-пулемёт, продолжай обязательно у тебя отлично получается 💪 12к подписчиков за год на 4 видосах говорит о том, что ты всё делаешь правильно, материал актуальный! Подтяни качество, сделай выпуски регулярными и будет круто. Если это тебе надо конечно 😜

  • @ps-037

    @ps-037

    Жыл бұрын

    Я думаю, что Александр это делает для общего развития - творческий порыв. Поверь мне, с такими мозгами ему доход от ютуба так... на шоколадки.

  • @user-wi4fg7xm2p
    @user-wi4fg7xm2p2 жыл бұрын

    очень полезный алгоритм

  • @andrewteterin975
    @andrewteterin975 Жыл бұрын

    Приятно слушать. Да ещё и Java)) спасибо

  • @user-rj2pq9jk5w
    @user-rj2pq9jk5w Жыл бұрын

    Спасибо большое за информацию)

  • @cathello2900
    @cathello29002 жыл бұрын

    Интересно 👍 Палец и т.п. за этот видос! По больше пожалуйста таких задача ! С разжевыванием и примером. Можно и не только на Алгоритмы. Но и более простые на возвраты. На операции логики сравнения и т.п и т.д. Вообще Очевидные цифры в особенности по условию - сразу бросаются в глаза. Как пример из первого пункта: 8 + (-1) Т.е крайние цифры к условию и цифры с отрицательным значением. Опять же надо смотреть и на контекст условия.. Но учитывая последние примеры то как раз таки отрицательные цифры используются.

  • @Gypuk
    @Gypuk Жыл бұрын

    Бинарный поиск требует проверки на размер массива, так как при маленьком размере у нас время процессора уходит на математические вычисления середины и проверки (просто пометка от ноунейма). Спасибо за видео. Люблю искать возможности для оптимизации. Пока с такими задачами не сталкивался, но если столкнусь, то буду знать, как сделать код быстрым, да ещё и красивым.

  • @Pavlo_Synytsia
    @Pavlo_Synytsia Жыл бұрын

    спасибо, интересно и познавательно

  • @NikolayMishin
    @NikolayMishin Жыл бұрын

    была такая задача в Яндексе)) спасибо за разбор, супер!

  • @infomail8550
    @infomail85502 жыл бұрын

    Классно все объяснил. Казалось бы просто решается, но как послушаешь, сколько есть вариантов, голова идет кругом. Да еще и на Джаве, красавчик!

  • @user-bx5ze4jw5p

    @user-bx5ze4jw5p

    2 жыл бұрын

    Чего такого в яве то? возможно выбран как один из хорошо читаемых языков. напиши на питоне, уже не каждый поймет.

  • @slavamobile3733
    @slavamobile37332 жыл бұрын

    Задача элементарная, двигаем окно и смотрим если сумма меньше, двигаем правую часть, если сумма больше двигаем левую часть. На статистике данных по распределению чисел мин, Макс и n можно эмпирически вывести функцию которая весьма точно будет попадать в индекс массива, да ещё давать длинну окна. Плюс для отриц и положит, будет два окна

  • @kriguitar4753

    @kriguitar4753

    2 жыл бұрын

    9:49 - оно и есть. Только одно окно для любых элементов и любого результата суммы А вот что делать если 3 слагаемых - пока непонятно.

  • @WillsherT

    @WillsherT

    2 жыл бұрын

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

  • @webblyy

    @webblyy

    2 жыл бұрын

    @@kriguitar4753 два указателя + хешсет

  • @KKZ_5000_RUB

    @KKZ_5000_RUB

    6 ай бұрын

    Отрицательные числа крайне редко в реальных задачах встречаются. Задачи эти теоретики диванные создают.

  • @user-tk7nh1jw3y

    @user-tk7nh1jw3y

    5 ай бұрын

    @@webblyy 2 указателя уже не нужны если есть хэш-сет

  • @EliJahMCI
    @EliJahMCI10 ай бұрын

    Интересно, спасибо за контент

  • @Sashikx_zxc
    @Sashikx_zxc Жыл бұрын

    Спасибо большое!! Вы молодец!

  • @user-eg7od8nu1u
    @user-eg7od8nu1u Жыл бұрын

    Я давно забросил программировать но первая мысль была от от 7 вычитать по одному и искать равные ! Последнее решение просто наикрасивейшее!!!

  • @user-kh9rp6tu2b

    @user-kh9rp6tu2b

    Жыл бұрын

    Можно так же идти с позиции I+1, чтобы не проверять уже пройденное число

  • @xelnagamex

    @xelnagamex

    Жыл бұрын

    последнее решение не работает

  • @kselnaag2482
    @kselnaag24822 жыл бұрын

    Контент топчик. Как раз изучаю алгоритмы и структуры данных, недавно узнал о 2-х указателях. Теперь бы еще научиться все это видеть в конкретных задачах.

  • @sashalukin

    @sashalukin

    2 жыл бұрын

    Спасибо :) С опытом придет, если до этого решил 10 задач на два указателя, то и в 11 увидишь. Если хочешь потренить, то вот сайт, на нем все к собесам готовятся: leetcode.com/problemset/all/?topicSlugs=two-pointers Решай easy задачи, и если не можешь придумать решение (а так в начале всегда будет), то смотри в комментах (секция Discuss). Удачи!

  • @hacamadahimichiru6110

    @hacamadahimichiru6110

    2 жыл бұрын

    Подскажите, пожалуйста, по алгоритмам годные источники. И по структурные данным, если можно

  • @kselnaag2482

    @kselnaag2482

    2 жыл бұрын

    @@hacamadahimichiru6110 Сам сейчас прохожу направление CS от Принстона на Курсере (от профессора Седжвика). Еще хвалят курс CS50 от Гарварда, но сам не пробовал. Все бесплатно и в интернете. Гуглите.

  • @hacamadahimichiru6110

    @hacamadahimichiru6110

    2 жыл бұрын

    @@kselnaag2482 спасибо!

  • @CoS1NuS1
    @CoS1NuS1 Жыл бұрын

    Большое спасибо! Очень интересно )

  • @user-qy7vv5yx3b

    @user-qy7vv5yx3b

    Жыл бұрын

    Я бы сказал формализовать вообще всё.

  • @user-iq2nq7cj6l
    @user-iq2nq7cj6l Жыл бұрын

    Спасибо, очень интересно!

  • @user-ri4rk3hn8g
    @user-ri4rk3hn8g2 жыл бұрын

    Круто!

  • @ntvisigoth
    @ntvisigoth Жыл бұрын

    Саша Лукин, спасибо за твой труд! Крайне хорошо поясняешь. Уметь пояснять сложное простыми словами это очень важный и полезный навык. В будущем, мы, люди, все чаще и чаще будем коммуницировать. Хотел бы тебя спросить вот о чем: Как ВИДЕТЬ более эффективный вариант чаще? Ведь до этого же надо додуматься! Вот ты привел разные решения, но ведь про них надо было сообразить . Как развивать соображалку то? ;) Пока, развитие сооражалки в алгоритмах вижу такой: Ты смотришь как решают другие. В голове откладываются разные подходы. А потом методом брутфорса при решении той или иной задачи пишешь код. Либо ты видишь такую задачу, которая очень похожа на ту, которую ты уже видел ранее и применяешь то, что ты помнишь. Но все это цепляется на знание и на способность мозга вспомнить и увидеть схожие черты с ранее решенной задаче. Есть ли другие способы ?

  • @Dimarious.G

    @Dimarious.G

    Жыл бұрын

    Чтобы развивать навык решения задач, нужно решать задачи. Чтобы развивать навык решать задачи эффективно, нужно решать задачи эффективно. Итого. Берёшь задачу, САМ решаешь её в лоб, то есть самым примитивным и очевидным способом. Пытаешься найти другие способы (да, сам). Сравниваешь полученные варианты, анализируешь их плюсы и минусы, ищешь слабые места, места, которые можно улучшить и т.д. и т.п. Смотришь, как другие люди решают другие задачи (да-да, именно другие) в поисках вдохновения. Смотришь, не появились ли ещё идеи, которые можно применить к своей задаче. Когда ты уже сдедал всё, что мог сделать сам, тогда и только тогда можно смотреть, как другие решают такие же задачи. Тогда будет развитие, а если просто смотреть на других, хоть и на лучших, ну хз... Сильно ли накачаешься, наблюдая за тем, как сильные силачи тягают железо? Вопрос риторический. Можешь не благодарить 😌

  • @byesedd

    @byesedd

    5 ай бұрын

    @@Dimarious.Gбоюсь сравнение с силачами не уместно, когда мы смотрим на силача, мы смотрим на процесс, и не применяем никаких усилий, а когда мы смотрим решение задачи, то мы смотрим на решение, а не на процесс, и применяем усилия для понимания

  • @byesedd

    @byesedd

    5 ай бұрын

    @@Dimarious.Gа так думаю ты прав в остальном

  • @maksigors
    @maksigors8 ай бұрын

    отличное видео, спасибо)

  • @el_dorado
    @el_dorado2 жыл бұрын

    Спасибо, я только начал подступаться к программированию. Ничего еще не знаю, но все равно интересно.

  • @iloginu
    @iloginu Жыл бұрын

    Вначале подумал и придумал вариант такой: берем первый и суммируем с последним. Если больше К, то берем предпоследний и тд. Ползем назад сравнивая с первым. Потом берем второй и опять сравниваем с последним, идя навстречу второму. О том, что последний можно не сбрасывать почему-то не додумался )

  • @olafk2628
    @olafk26282 жыл бұрын

    Спасибо! Мне кажется, не лишним будет упомянуть, что сортировка это в среднем еще плюс O(n log n) по времени к оценке сложности, если изначально массив не отсортирован.

  • @sashalukin

    @sashalukin

    2 жыл бұрын

    Ага, и часто эту задачу дают в виде неотсортированного массива, где нужно найти 3 числа, в сумме дающих k. В таком случае просто в начале сортируем массив, потом пишем цикл прохода по массиву (это будет первое число из 3), а второе и третье каждый раз пытаемся найти методом двух указателей как в видео. Тогда время будет O(n^2) и O(n log n) от сортировки не влияет на итоговую сложность.

  • @dimapimenov6807

    @dimapimenov6807

    2 жыл бұрын

    Нет, в таком случае алгоритм работать не будет Пример: [0, 3, 2], к=3 Тогда начальная пара (0, 2) в сумме даст меньше, чем надо, и следующая пара для рассмотрения будет (3, 2)

  • @Boosty931

    @Boosty931

    2 жыл бұрын

    @@dimapimenov6807 у тебя не сортирован массив. После сортировки все будет ок.

  • @dimapimenov6807

    @dimapimenov6807

    2 жыл бұрын

    Ну так и вопрос был про несортированный массив и алгоритм на нем

  • @dimapimenov6807

    @dimapimenov6807

    2 жыл бұрын

    Если я вообще правильно понял вопрос... Я решил что вопрос про метод 2х указателей

  • @leomysky
    @leomysky Жыл бұрын

    Круто и очень понятно, спасибо

  • @user-hd9hw7nl1n
    @user-hd9hw7nl1n Жыл бұрын

    отличный контент и подача материала !! единственное упущение, мало роликов ((

  • @digimax1288
    @digimax12882 жыл бұрын

    Здорово, не занимаюсь программированием, никак не решаюсь начать, но настолько четкое объяснение, что понял даже я. Спасибо!

  • @sashalukin

    @sashalukin

    2 жыл бұрын

    Спасибо! А программирование начать учить никогда не поздно, сейчас очень много моих друзей не из айти переходят в айти. Только время нужно выделить, я бы ориентировался хотя-бы на год, если довольно плотно заниматься. Удачи!

  • @digimax1288

    @digimax1288

    2 жыл бұрын

    @@sashalukin спасибо большое за совет и напутствие

  • @AVS11176

    @AVS11176

    2 жыл бұрын

    Многое теряете, я когда по работе понял, что делаю много повторяющихся действий, решил автоматизировать процессы, я даже что такое IDE не знал. Уровень на доске меня пока восхищает, стремлюсь к тому, что бы сделать его банальным.

  • @digimax1288

    @digimax1288

    2 жыл бұрын

    @@AVS11176 я вообще в банке работаю на данный момент, ну и как везде, 70% работы это эксель и какое-то статистическое ПО (типо R, у нас САС). То когда я залезал в VBA или в SAS все смотрели как на мага-чародея

  • @user-pv1ol1vc8k
    @user-pv1ol1vc8k Жыл бұрын

    Любопытно, что некоторые задания из ЕГЭ сложнее, чем реальная задача с собеседования )

  • @vladislavbaranovskii4133

    @vladislavbaranovskii4133

    Жыл бұрын

    это же хорошо, подготовился к проф ЕГЭ, и можешь идти в гугл

  • @Grim_J0nes

    @Grim_J0nes

    Жыл бұрын

    Да, если не учитывать бэкграунд кандидата(опыт работы с платформами, модулями и тд), выпускник ЕГЭ подходит)

  • @dmitry7464

    @dmitry7464

    Жыл бұрын

    Задания из ЕГЭ по информатике?

  • @abcdefghi1489

    @abcdefghi1489

    Жыл бұрын

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

  • @Whitestarwhitestar

    @Whitestarwhitestar

    Жыл бұрын

    ​@@abcdefghi1489 на ЕГЭ тоже стресс не маленький)

  • @AlexanderBogachuk
    @AlexanderBogachuk2 жыл бұрын

    А. Бал. Деть. Узнал много нового. Спасибо!

  • @AAzamdjon
    @AAzamdjon Жыл бұрын

    Это работает если нужно найти лишь одну пару чисел. Но больше спасибо за объяснение. Очень легко воспринимается такая подача!)

  • @hotKorzhik
    @hotKorzhik2 жыл бұрын

    Саша, привет! Большое спасибо за разборы задач. То, что ты делаешь - круто. Успехов тебе и каналу, продолжай. У меня вопрос: у тебя есть контактная почта или другие каналы связи? Хотелось бы написать: узнать и задать буквально пару вопросов про твой опыт переезда айтишника в Индонезию. Успехов!

  • @romanbykov5922

    @romanbykov5922

    Жыл бұрын

    сочувствую вам, если вы считаете, что ЭТО - круто...

  • @enternickhere
    @enternickhere2 жыл бұрын

    Здравствуйте! Спасибо за видео). Вопрос не совсем по теме: какая основная разница между массивом и коллекцией, которая позволяет "одновременно" перебирать все ее элементы?

  • @user-yf8jf3fo2x

    @user-yf8jf3fo2x

    2 жыл бұрын

    Не совсем понятно что значит "одновременно" перебирать все ее элементы. Collection наследуется от Iterable т.е. все коллекции позволяют перебирать, если речь об этом. Могу предположить что речь идет о том что массивы фиксированной длины, а реализации интерфейса Collection динамической, т.е. увеличиваются по мере добавления элементов. Массив также используется под капотом некоторых реализаций интерфейса Collection например ArrayList и частично HashSet. Ну т.е. более простой базовый объект для более сложных структур данных. В контексте задачи наверное речь про то что поиск по HashSet за О1 а не за On как у массива отсюда и ускорение.

  • @enternickhere

    @enternickhere

    2 жыл бұрын

    Да, меня заинтересовало то, что сложность использования коллекции - О(1), а не О(n). То есть коллекция способна перебирать элементы настолько быстро, что время, затраченное на перебор, считается постоянным?

  • @user-yf8jf3fo2x

    @user-yf8jf3fo2x

    2 жыл бұрын

    @@enternickhere почитайте "как работает HashMap в джава". элементы там хранятся в массиве связанных списков или массиве бинарных деревьев. Индекс массива вычисляется(а не перебирается) в зависимости от содержимого элемента при его помещении. И также потом при его поиске и извлечении.

  • @enternickhere

    @enternickhere

    2 жыл бұрын

    Почитал, понял)

  • @egorlazuka770
    @egorlazuka770 Жыл бұрын

    Гениальное решение, спасибо)

  • @user-lb2bw8xc2y
    @user-lb2bw8xc2y2 жыл бұрын

    Спасибо, очень помогло!

  • @yury497
    @yury4972 жыл бұрын

    Последнее решение даже не пришло в голову, пока не зашла речь про указатели, но чёрт возьми, оно такое простое и офигенное!

  • @NikolayMishin

    @NikolayMishin

    Жыл бұрын

    согласен

  • @zunos7969
    @zunos79695 ай бұрын

    это разве не Two Sum с литкода?

  • @user-tn5ik8tb3k
    @user-tn5ik8tb3k Жыл бұрын

    Я смог сам дойти до последнего решения в видео) Спасибо автору за контент

  • @aleks3954
    @aleks39542 жыл бұрын

    шикарный разбор

  • @eugen7965
    @eugen7965 Жыл бұрын

    В втором решении тоже два цикла. Второй скрыт - это поиск в хешсете (скрытый перебор по нему)

  • @Z3rgatul

    @Z3rgatul

    Жыл бұрын

    Чего??? Поиск в хешсете О(1)

  • @sergeifomin3225

    @sergeifomin3225

    Жыл бұрын

    @@Z3rgatul sets (аналог C++ std::unordered_map), Dictionary и Tuple (аналог std::map в C++) контейнеры для хранения списка ключей реализованы на базе бинарного дерева (сложность поиска log(n)). Хз. Почему во всех мануалах python написано O(1). Может кто объяснит?

  • @Z3rgatul

    @Z3rgatul

    Жыл бұрын

    @@sergeifomin3225 кто сказал что set в python это бинарное дерево? там hashtable

  • @rasimbot

    @rasimbot

    Жыл бұрын

    @@sergeifomin3225 | Нет, unordered_set и unordered_map это хэш-таблицы с O(1). Не дерево

  • @viacheslavmatveichev4039
    @viacheslavmatveichev40392 жыл бұрын

    Здравствуйте! Спасибо большое за разбор. Задача интересная и довольно популярная. Но отдельный интерес вызывает именно математическое обоснование данного алгоритма. А именно: доказать, что решение найдется при движении именно левого поинтера, когда сумма меньше и правого, когда сумма больше. Не сможете помочь разобрать? Обоснование порой спрашивают чаще, чем сам алгоритм. Спасибо!

  • @bpht618

    @bpht618

    2 жыл бұрын

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

  • @viacheslavmatveichev4039

    @viacheslavmatveichev4039

    2 жыл бұрын

    @@bpht618 , здравствуйте. Да, я согласен, интуитивно и логически алгоритм полностью понятен. Но хочется именно математически обоснование/доказать в более менее лаконичной форме. Возможно надо просто действовать от противного и на каком-то шаге N показать, что иной суммы нет, потому что иначе бы мы ее точно встретили на шаге К

  • @sashalukin

    @sashalukin

    2 жыл бұрын

    Я бы доказывал через инвариант (условие, которое выполняется изначально и сохраняется после каждой итерации цикла). Инвариант: все элементы массива с индексами r точно нам не подходят. Изначально это условие выполняется, потому что элементов массива с индексами меньше 0 или больше nums.length-1 нет. При каждой итерации мы считаем сумму элементов. Так как массив отсортирован, то по нашему инварианту arr[r] - максимальный по значению элемент среди всех тех, которые потенциально могут быть в ответе. Если arr[l] + arr[r] < k, то arr[l] + arr[i

  • @sashalukin

    @sashalukin

    2 жыл бұрын

    Но в Гуглах-Амазонах крайне редко спрашивают доказательства. Там все очень структурированно, т.е. есть четкие правила, по которым идут собеседования и правила, по которым они оцениваются. Грубо говоря, это решил/не решил задачу, придумал оптимальное/не оптимальное решение, написал код без багов/с багами, и.т.д. Но объяснить простыми словами, почему решение работает, конечно, нужно. А в наших компаниях это любят, согласен. Меня несколько раз просили доказать какие-то штуки, самым популярным было, что добавление элемента в динамический массив работает в среднем за О(1). www.quora.com/Do-I-need-to-study-mathematical-proofs-in-algorithms-for-a-software-engineer-interview-with-Facebook-Google

  • @viacheslavmatveichev4039

    @viacheslavmatveichev4039

    2 жыл бұрын

    @@sashalukin спасибо! Да, Вы правы, такие вопросы на математические доказательства/обоснования мы получали именно в наших компаниях… интересно :) всего доброго, с нетерпением ждём новых выпусков! :)

  • @tihon4979
    @tihon49792 жыл бұрын

    Шикарно! Здорово! Полезно! Лукас субскрайбович! 🤣👍

  • @sofiabelousova8586
    @sofiabelousova85862 жыл бұрын

    Ой, кажется, я влюбилась) Я далеко не разработчик (всего лишь МП), но было понятно и интересно) Тоже заметила в начале про две пары, дающие правильный ответ)

  • @djangodev3191
    @djangodev31912 жыл бұрын

    Недавно подписался и вот

  • @russellstar
    @russellstar2 жыл бұрын

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

  • @realvall

    @realvall

    2 жыл бұрын

    Только из-за того, что задачки порешал, платить конечно не будут. Это условие обязательное, но не достаточное. А вот если задачки не порешал, то деньги ТОЧНО не будут платить.

  • @sovaz1997

    @sovaz1997

    2 жыл бұрын

    @@realvall и тем не менее, данная задача не скажет ничего от слова совсем (т. е. 0%) по поводу уровня программиста. Соответственно, самый правильный способ - убрать эту задачу из собеседования и оставить олимпиадникам

  • @anti_middle_ages

    @anti_middle_ages

    2 жыл бұрын

    @@sovaz1997 Ну тебе виднее)

  • @realvall

    @realvall

    2 жыл бұрын

    ​@@sovaz1997эти задачи и не должны показывать "уровень программиста". на собеседованиях они для того, чтобы понять, есть у соискателя задатки логического мышления, необходимого в будущей работе, или на этапе выполнения простенькой задачки с ним уже можно закончить общение. а касательно того, что такие задачки нужно убрать из собеседования - я с вами и согласен, и нет, одновременно, как бы странно это не звучало. правильного ответа тут нет, зависит все от того, чья компания и кто определяет, как он будет отбирать сотрудников. если ваша, то, вероятно вы правы, и вам сотрудники, умеющие решать такие задачки, не нужны. если компания не ваша, то, скорее всего ее владельцам виднее, кто им нужен и какие задачки он должен уметь решать.

  • @QuickCube

    @QuickCube

    2 жыл бұрын

    @@sovaz1997 если будете пробовать трудоустраиваться в yandex, там будет много таких и более сложных задач. Если пойдёте в дойче банк, то они тоже несколько задач подобных давали.

  • @eugenedukatta9355
    @eugenedukatta93552 жыл бұрын

    Понравилось грамотная подача, четкая и чистая речь без эээ-каний, без слов-паразитов, без соплей. Так держать, удачи!

  • @YKupriyanov_
    @YKupriyanov_4 ай бұрын

    Саша главное твоя подача! Красавчик

  • @blushingpie
    @blushingpie2 жыл бұрын

    (Во втором примере) Разве проверка наличия элемента а массиве равна O(1)? Мне кажется, что больше на O(n) похоже, тогда алгоритм будет О(n^2)?

  • @user-fu7ox7ml2u

    @user-fu7ox7ml2u

    Жыл бұрын

    Тож заметил) set.contains написал и радуется)

  • @user-pp6zi7lz7s
    @user-pp6zi7lz7s2 жыл бұрын

    В первом варианте нужно добавить проверку: если сумма двух чисел больше К, то вернуться в начало первого цикла, потому что дальнейшие суммы будут также больше К, т.к. массив отсортирован. В варианте с бинарным поиском при делении на две части нужно использовать целочисленное деление на 2, потому что в какой-то момент программа будет пытаться найти элемент с не целым номером индекса, например, 6,5.

  • @user-wn2vu9jb3x

    @user-wn2vu9jb3x

    2 жыл бұрын

    Делится тип Integer. Он при делении дает целочисленное значение без остатка. Пример: 13/2 = 6;

  • @Rameronos

    @Rameronos

    Жыл бұрын

    Java, в отличии от всяких питонов и js, строго типизированный язык и в нём исключено получить дробное значение при делении целых чисел, если явно это не указывать. При этом, результат деления всегда округляется до меньшего числа. То есть даже если провести операцию, к примеру, 59 / 10, то результат будет 5. Однако, если хотя бы одно из делимых чисел привести к дробному типу, вроде (float)59 / 10 или 59.0 / 10, то результат вычисления уже будет 5.9.

  • @XEL234234234234

    @XEL234234234234

    Жыл бұрын

    @@Rameronos не округляется до меньшего, а отбрасывается дробная часть - разницу хорошо видно если делить на 10 не 59, а минус 59

  • @DadundddaD

    @DadundddaD

    Жыл бұрын

    Зачем целочисленное деление, если есть битовый сдвиг? Или в джава он под запретом?

  • @DadundddaD

    @DadundddaD

    Жыл бұрын

    ​@@Rameronosпитон тоже строго типизирован, но динамически.

  • @stephanisagulov9249
    @stephanisagulov9249 Жыл бұрын

    Привет. Я семь лет назад перешёл на электронику, но посмотрел по приколу и Очень понравилось, понятно получаеться!

  • @user-eb2kh4df6r
    @user-eb2kh4df6r2 жыл бұрын

    Во втором варианте, все же, оценка не совсем верная. O() -оценка в ХУДШЕМ случае, а не в среднем. В ХУДШЕМ случае (если хеш-функция - хреновая), сложность будет O(n log n). Другое дело, что для int хэш известен. И в конкретном случае с int - все будет верно - O(n), но стоит заменить тип (самое простое обобщение), как все станет совсем не очевидно

  • @griglog1309

    @griglog1309

    2 жыл бұрын

    Тип не имеет значения, коллизии будут всегда. С int'ами тоже вполне можно упереться в nlogn.

  • @user-hg3wh1sm8k

    @user-hg3wh1sm8k

    2 жыл бұрын

    Суммарно n запросов к хеш таблице будут иметь сложность O(n) И худший случая - линия, кажется, а не логарифм. Однако оценку на среднее время выполнение операции в O(1) можно доказать.

  • @griglog1309

    @griglog1309

    2 жыл бұрын

    @@user-hg3wh1sm8k Ты не понял, сложность обращения к хэш-таблице в джаве - O(log(n)) в худшем случае

  • @user-hg3wh1sm8k

    @user-hg3wh1sm8k

    2 жыл бұрын

    @@griglog1309 но ведь оценка вида умножить худший случай на количество вызовов будет слишком грубой. Амортизированная оценка дает линейное время работы, как и у всех хешированных структур.

  • @user-hg3wh1sm8k

    @user-hg3wh1sm8k

    2 жыл бұрын

    @@griglog1309 а какой худший случай времени работы одной операции, линия или логарифм, пока что не понял. Кажется, что использование хеш таблицы обычно дает линию в худшем случае, но могу ошибаться. В любом случае, суммарное время работы будет всегда линейным, а я ответил на комментарий, где автор оценивает асимптотику как O(nlogn)

  • @johnmurdoch8368
    @johnmurdoch8368 Жыл бұрын

    Та что уж там.. на миллион евро год

  • @olegnikitindev
    @olegnikitindev Жыл бұрын

    Хорош! Спасибо

  • @begula_chan
    @begula_chan Жыл бұрын

    Весьма интересно

  • @leight9503
    @leight95032 жыл бұрын

    Красиво. Я смог придумать решение похуже - O(2n) c двумя проходам по исходному массиву и одним оп массивом, но, формально, это, все равно, O(n) :) 1) проходим по исходному массиву a[] и вычисляем разницу d каждого элемента с 9. 2) кладем значение этого элемента в другой массив arr1[d] = a[i] 3) еще раз идем по массиву a[] и для каждого элемента пытаемся взять arr1[d] - если взялось,значит мы нашли результат. 4) в качестве доп оптимизации, можно сделать третий массив , где будут храниться значения d, чтобы не считать их во второй проход.

  • @z140140

    @z140140

    9 ай бұрын

    arr1 - это ассоциативный массив, т.е. хешсет. вся разница в том, что вы строите его целиком, а автор вероятно на лету проверяет

  • @kaspersky_ege
    @kaspersky_ege2 жыл бұрын

    Прикольно, что сейчас в ЕГЭ задачи сложнее))

  • @kaspersky_ege

    @kaspersky_ege

    2 жыл бұрын

    Годика 3 назад были задачи, что из списка чисел надо посчитать все пары, которые в сумме кратны заданному К. Вернуть все эти пары - это пара доп действий. Сейчас задаче ещё лютее)

  • @reisders

    @reisders

    Жыл бұрын

    @@kaspersky_ege у меня что-то похожее было, сдавала в 2017 году, решила на 4 балла 27-е в 2, что ли, цикла (без вложенного)

  • @kaspersky_ege

    @kaspersky_ege

    Жыл бұрын

    @@reisders с 2017 многое поменялось, мы теперь на компьютере экзамен пишем и программа реально должна работать на 1млн строк эффективно

  • @sed0k

    @sed0k

    Жыл бұрын

    ЕГЭ по информатике вообще можно в одном Экселе сделать

  • @kaspersky_ege

    @kaspersky_ege

    Жыл бұрын

    @@sed0k да конечно, особенно 24 задание и 15 удобно, 14 более менее, 1 и 13 -- один кайф, 10 -- обязательно в экселе, 6 -- ну естественно к чему коммент? я сказал, что задача в 27 сложнее, пир чем эксель? почему? что за комментарий? я не понимаю. я умер.

  • @user-gt5st3wh2p
    @user-gt5st3wh2p2 жыл бұрын

    Спасибо за видео) Можно попросить выпускать видео по чаще чем раз в год?) Пока в России еще ютуб работает..

  • @vadlocksvadlearn7746
    @vadlocksvadlearn77466 ай бұрын

    Приятно, что моя первая мысль и была лучшим решением

Келесі