Саша Лукин
Саша Лукин
  • 17
  • 4 137 799
Грабим Дома на Собеседовании в Google
Углубите знания во Фронтенд-разработке на курсе от Яндекс Практикума: ya.cc/t/11pC4NxQ4zgKAd
Erid: 2Vtzqws5UFs
Разбираем задачу из собеседований, в которой необходимо ограбить дома максимально эффективно, при этом не вызвав сигнализацию.
Задача решается с помощью Динамического Программирования. Это метод решения задач, в котором исходную трудную задачу мы разбиваем на маленькие подзадачи. Решаем в начале их, а потом собираем ответ на всю исходную задачу.
Задача на Leetcode: leetcode.com/problems/house-robber/
00:00 Вступление
00:37 Условие
01:55 Первые идеи
03:02 Яндекс Практикум
04:34 Динамическое Программирование
10:01 Код Решения
Мой Телеграм канал: t.me/saschalukin
Переглядів: 31 738

Відео

Первый Алгоритм Для Изучения в 2024
Переглядів 64 тис.21 день тому
Разбираем алгоритм, который поможет решать задачи на собеседованиях в крупные айти компании. Подписывайтесь на мой Телеграм канал: t.me/saschalukin Эта задача на Leetcode: leetcode.com/problems/longest-substring-without-repeating-characters/ 00:00 Вступление 00:23 Условие 01:20 Решение перебором 03:59 Быстрое решение 06:37 Код
Задача из Моего Собеседования в Amazon - Поиск в Ширину
Переглядів 57 тис.Місяць тому
Разбираем задачу из моего первого собеседования в Amazon. Я устраивался на позицию Junior Backend в Берлинский офис. Задача решается с помощью известного алгоритма BFS (поиск в ширину). Эта задача на Leetcode (требуется premium подписка): leetcode.com/problems/minimum-knight-moves/description/
Я Прошел Собеседование в Google… Как?
Переглядів 541 тис.6 місяців тому
Рассказываю историю того, как я загорелся идеей попасть в Google. Как я готовился к собеседованиям, и что на них спрашивали. Дисклеймер Я не могу разглашать конкретные задачи, которые были на собеседованиях, поэтому привожу только примерные темы, на которые они были.
Как бы я учил программирование сейчас?
Переглядів 348 тис.9 місяців тому
Освойте основы работы с Git на бесплатном курсе от Яндекс Практикума - ya.cc/t/bOWa-Yv74PoH8y Токен: LdtCKWBwm Мой путь от вылета из универа до работы в Google был не самым простым. Если бы я начал с начала, как бы я учил программирование? Рассказываю о своем опыте изучения айти. 00:00 Вступление 01:00 Найти единомышленников 01:56 Пойти на курсы 03:19 Рано начать ходить на собеседования 04:16 П...
Хеш-таблица - Самая Популярная Структура Данных
Переглядів 238 тис.9 місяців тому
Пройдите бесплатный курс от Яндекс Практикума - "Какую профессию в программировании выбрать": ya.cc/t/UrGOef-q4LmqEn Токен: LdtCKa7Ux Разбираем как работает HashSet - структура данных, которая позволяет проверять в ней наличие любого элемента за О(1) времени. Затем модифицируем ее так, чтобы получить хеш-таблицу, то есть структуру данных, хранящую пары ключ-значение. Обе эти структуры данных оч...
Собеседование в Facebook - Разбор Для Начинающих
Переглядів 45 тис.10 місяців тому
Разбираем очень популярную задачу из собеседования в Facebook на позицию разработчика ПО. Она решается с помощью хитрого приема, который поможет при решении не только этой, но и многих других задач из собеседований в топовые зарубежные айти компании. Эта задача на Leetcode: leetcode.com/problems/subarray-sum-equals-k/ Освойте основы Python-разработки на бесплатном курсе от Яндекс Практикума - y...
Эту Несложную Задачу НЕВОЗМОЖНО Решить - Собеседование в Apple
Переглядів 79 тис.11 місяців тому
Разбираем задачу, которую дали моему знакомому на собеседовании в Apple на позицию Software Developer. При этом найти решение самому заранее не зная ответ, как мне кажется, невозможно. Причем задача звучит очень просто, а решение пишется буквально в несколько строк кода. Задача на LeetCode: leetcode.com/problems/linked-list-cycle-ii/ ya.cc/t/0qsU2tAQ4FaNHQ - Попробуйте себя в роли «Фронтенд-раз...
Собеседование на Backend в Лондон за $12.000 в Месяц
Переглядів 116 тис.11 місяців тому
Разбираем задачу из собеседования на позицию Backend Software Developer в Goldman Sachs. Это банк у которого есть куча офисов по всему миру. Один из крупных находится здесь в Лондоне. Средняя зарплата на позицию с 3 годами опыта работы - 12.000 долларов в месяц. Задача на Leetcode: leetcode.com/problems/h-index/description/ Первый дополнительный вопрос: leetcode.com/problems/h-index-ii/ Пост на...
Задача из Собеседования в Amazon за 5 минут
Переглядів 295 тис.Рік тому
Разбираем небольшую задачку, которую спросили на собеседовании в Amazon. Такие задачи надо уметь решать за 10-15 минут, но без опыта решения подобных задач найти самое быстрое решение может быть не просто. Задача на литкоде: leetcode.com/problems/search-a-2d-matrix-ii/ Пост на литкоде: leetcode.com/discuss/interview-experience/387754/Amazon-or-SDE1-or-Bengaluru-India-or-July-2019-No-Offer Дискл...
Задача из Собеседования в Microsoft (Бинарные Деревья)
Переглядів 228 тис.Рік тому
Разбираем 2 задачи из собеседования в Microsoft в Пражский офис. Я постарался объяснить их так, чтобы было понятно даже тем, кто вообще про бинарные деревья в первый раз слышит. Задачи на литкоде: 1 - leetcode.com/problems/path-sum/ 2 - leetcode.com/problems/binary-tree-maximum-path-sum/ Дисклеймер: Изначальные задачи, которые спросили у подписчика, были другими. Я разобрал похожие, но которое ...
Google дал мне эту квартиру в Лондоне
Переглядів 51 тис.Рік тому
Обзор квартиры, которую мне дал Google на 3 месяца после переезда в Лондон. Еще я сейчас готовлю разборы задач из последних собеседований, так что скоро будут новые видео. Спасибо, что смотрите! :) 00:00 Что это за квартира 01:25 Кухня 02:02 Гостиная 03:10 Офис 03:45 Первая спальня 04:35 Две ванные 05:16 Вторая спальня 05:29 Итоги
Задача из Собеседования на 160,000 Евро в Год
Переглядів 1,1 млн2 роки тому
Разбираем популярную задачу, которую спросили у моего знакомого на собеседовании на позицию Senior Software Developer в Берлине. После успешного прохождения нескольких собеседований, ему предложили зарплату в 160.000 евро в год. Задача состоит в поиске двух чисел из отсортированного массива, в сумме дающих заданное число. 00:00 Вступление 00:54 Условие задачи 02:09 Перебор всех пар 03:38 HashSe...
Как подготовиться к собеседованию в Google, Amazon & Facebook
Переглядів 51 тис.3 роки тому
В этом видео я рассказываю о том, что спрашивают на собеседованиях в Google, Amazon, Facebook и других топовых айти компаниях, а также о том, как к этим вопросам подготовиться. Привет, меня зовут Саша Лукин. В 2019 году я переехал в Берлин для работы разработчиком в Амазоне. На этом канале я рассказываю о жизни в Германии и о том, как подготовиться к собеседованию в топ айти компании. Что внутр...
Подготовка к собеседованию в Google - Хитрая задача на Стек
Переглядів 154 тис.3 роки тому
Разбираем довольно сложную алгоритмическую задачу по программированию с применением стека. Ее могут спросить на собеседовании в Google, Amazon и Facebook. Эта задача на LeetCode: leetcode.com/problems/daily-temperatures/
Задача из Собеседования в Амазон: Поиск Знаменитости. Метод двух указателей
Переглядів 323 тис.3 роки тому
Задача из Собеседования в Амазон: Поиск Знаменитости. Метод двух указателей
Задача из Собеседования в Google на Динамическое Программирование: Количество Уникальных Путей
Переглядів 399 тис.3 роки тому
Задача из Собеседования в Google на Динамическое Программирование: Количество Уникальных Путей

КОМЕНТАРІ

  • @vilture5706
    @vilture5706 День тому

    Алгоритм Дейкстры

  • @bobbob-rd7yz
    @bobbob-rd7yz День тому

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

  • @Magomed-r
    @Magomed-r День тому

    Было интересно

  • @uasite
    @uasite День тому

    Откуда у вас эти стрОку, подстрОку? Ведь строкА, а значит строкУ, а не стрОку?

  • @user-yc8fh8ri6w
    @user-yc8fh8ri6w 2 дні тому

    Я обязательно выживу......

  • @oArleo
    @oArleo 2 дні тому

    Я бы построчным вводом добавлял , сортировал массив и сравнивал первую и вторую позиции и как только они равны записал бы размер массива-1, а потом начинал бы со второго символа.

  • @ktrgamesbigskelleton2193
    @ktrgamesbigskelleton2193 3 дні тому

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

  • @DrewPython
    @DrewPython 3 дні тому

    известно куда последний переезд - everybody comes to Hollywood.

  • @insable7459
    @insable7459 3 дні тому

    чувак на серьёзе рассказывает как решать 24 задание (из 27) из егэ по информатике..

  • @ivankondratyev2363
    @ivankondratyev2363 3 дні тому

    реализация "простого" решения убила... я даже и не подумал что так можно XD

  • @user-dk4mm8mt2t
    @user-dk4mm8mt2t 3 дні тому

    После того как мы посчитали можно не сортировать, а работать непосредственно с массивом подсчитанных значений. Идём с конца и если значение больше или равно индексу, то возвращаем его, если нет , то увеличиваем следующее значение (индекс - 1) на количество в данной ячейке (вед h статьи должны цитироваться минимум h раз, а не ровно h). Вот код второй части на go: for i := len(cnt)-1; i>=0; i-- { if cnt[i] >= i { return i } if i > 0 { cnt[i-1]+=cnt[i] } }

  • @v.demchenko
    @v.demchenko 3 дні тому

    Я бы хотел поправить автора видео. Дело в том, что приобьяснении он говорит про итерацию по числам справа. Но по делу, скрипт работает с нулевым и последующими елементами. Для того, что бы реализовать процесс как было обьясненно. Нужно ко второму циклу накинуть +1 и в сумму в первом цикле обьявить как елемент по которому итерируемся.. плюс условия по проверке так же изменить на начало.

  • @alex-and-er
    @alex-and-er 3 дні тому

    А с микрофоном (петличкой) было бы намного приятнее слушать ;-)

  • @karpulix
    @karpulix 3 дні тому

    20:59 позволю себе ремарку: `answer = Math.max(answer, maxLeftPath + maxRightPath + node.val);` ☝тут в `answer` будет записан 0 если на входе корень без детей, но с отрицательным значением или если в дереве только отрицательные значения ; мне кажется, нужно перед вызовом `helper()` инициализировать `answer = root.val`

  • @user-vc5nj9zd6i
    @user-vc5nj9zd6i 4 дні тому

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

  • @dimasw99
    @dimasw99 4 дні тому

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

  • @AlexeyGogots
    @AlexeyGogots 4 дні тому

    Какой еще BFS?! Эта задача для доски бесконечного размера, хоть по той же ссылке на leetcode.

  • @daniyarzhanakhmetov7741
    @daniyarzhanakhmetov7741 4 дні тому

    Крутецки всё объяснил! Спасибо!

  • @iqfunru
    @iqfunru 4 дні тому

    А мне показалось, что надо начинать с середины матрицы по типу двоичного поиска: 16 > 14, поэтому примерно четверть матрицы вправо и вниз от 16-ти не подходит. И т.д....

  • @iqfunru
    @iqfunru 4 дні тому

    А тараканы водятся в этих квартирах?

  • @romanpr6691
    @romanpr6691 4 дні тому

    В какой проге анимацию делаете?

  • @alexeidubrovin5234
    @alexeidubrovin5234 4 дні тому

    но вы же второй при перемещении left тоже опять перебираете, не проще ли использовать std::map, хранить там позицию символа и сразу смещать позицию на искомый символ+1

  • @alexeis628
    @alexeis628 4 дні тому

    динамическое программирование?? не метод математической индукции?

  • @__-oc6iq
    @__-oc6iq 5 днів тому

    Что на счёт знания английского?

  • @foxes_pak
    @foxes_pak 5 днів тому

    Не забывайте упомянуть ссылаясь на Яндекс, что они там такие задачки решают на листочке карандашом.

  • @aleks2322
    @aleks2322 5 днів тому

    Наконец-то dyversity inclusif задачи от гугл

  • @rybiizhir
    @rybiizhir 5 днів тому

    Можно слоями, а можно просто назначить вес каждой клетке.

  • @aleksanderpeshkin2266
    @aleksanderpeshkin2266 5 днів тому

    Что за бред 😮 Яндекс так обучает ??))

  • @ploho__3699
    @ploho__3699 6 днів тому

    это разве не первая задача литкода?)

  • @hanamura8844
    @hanamura8844 7 днів тому

    на самом деле работает это немного иначе, да и хеш таблица и множество немного разные структуры данных. wiki: Красно-чёрные деревья являются одними из наиболее активно используемых на практике самобалансирующихся деревьев поиска. В частности, контейнеры set и map в большинстве реализаций библиотеки STL языка C++[3], класс TreeMap языка Java[4], так же, как и многие другие реализации ассоциативного массива в различных библиотеках, основаны на красно-чёрных деревьях. возможно где-то это и работает тем способом, что изложил автор, но явно не везде. за материал - отдельное спасибо. сделано хорошо. но вот с тем, как это работает на самом деле я бы поспорил. если кто-то хочет сам проверить как это работает(исходя из того, что утверждает автор), то самый простой и логичный способ - замеры времени получения того или иного элемента из коллекции. всем хорошего дня!

  • @victorkochkarev2576
    @victorkochkarev2576 7 днів тому

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

  • @antondreka4068
    @antondreka4068 7 днів тому

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

  • @vivowalk
    @vivowalk 7 днів тому

    У меня решение лучше и работает с нечетными циклами - идём по списку и разворачиваем ссылки обратно. На каждом шаге проходим назад по обновленным ссылкам и проверяем встречалась ли эта вершина. По расходу памяти тоже самое, два указателя. Развернуть связи обратно не проблема, но в условиях это не требовалось. Смысл алгоритма в том, что двигаясь в обратном направлении всегда приходишь в начальную точку или упираешься в искомое, т.е. операция поиска конечна. Надеюсь я не первый придумал этот алгоритм 😂

  • @user-yd9xy3rb4x
    @user-yd9xy3rb4x 8 днів тому

    А вот и спасибо)

  • @dmitryAdams
    @dmitryAdams 8 днів тому

    Алгоритм Ахиллеса и черепахи, ещё применяется для поиска цикла в алгоритмах псевднорандома🤓

  • @denisvlasovakapiligrimscor3771
    @denisvlasovakapiligrimscor3771 8 днів тому

    Пары парятся, а тройки движутся...

  • @user-vc5nj9zd6i
    @user-vc5nj9zd6i 8 днів тому

    Спасибо за bfs! Но в аналитическом решении сложность О(1). N = (lnl + lml)/3 ± 4. Начальные координаты коня (0,0), конечные (n, m). Если рассмотреть как ходить в конце (варианты), то формула будет без погрешностей.

  • @renjerstars4434
    @renjerstars4434 9 днів тому

    Похожие задания можно встретить на ЕГЭ по информатике. Получается что экзамен подготавливает нас не к ВУЗу, а сразу к собеседованию😅

  • @VictorVedmich
    @VictorVedmich 9 днів тому

    О а не подскажите через что вы делаете скрытие контента а потом его появление, по клику ?

  • @user-jp1jv9yl9y
    @user-jp1jv9yl9y 10 днів тому

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

    • @SayXaNow
      @SayXaNow 9 днів тому

      Практически любая задача на ДП канонически решается через рекурсию, а только потом оптимизируется, если есть необходимость. 1. Составляется общая рекурсия: def lave(a:list) -> int: return max(a[0] + lave(a[2:]), a[1] + lave(a[3:])) if len(a) > 2 else max(a, default=0) Задача решена, но в таком виде не годится, т.к. количество рекурсивных вызовов растет экспоненциально. 2. Применяем меморизацию, это превратит к-во вызовов из экспоненты в линию: d = {} def lave(a:list) -> int: if len(a) in d: return d[len(a)] else: d[len(a)] = max(a[0] + lave(a[2:]), a[1] + lave(a[3:])) if len(a) > 2 else max(a, default=0) return d[len(a)] 3. Вот и все. Можно оставить в таком виде, а можно оптимизировать дальше, заменив передачу массива на индексы, переписать рекурсию в цикл (вариант из видео), уменьшить затраты памяти до константы (если есть возможность) и т.д.

  • @akunamatata5137
    @akunamatata5137 10 днів тому

    Privet! Otlichni kanal! Sdelai razbor na zadachu pro permutations. Eto zadacha bila na sobesedovanii v Amazon.

  • @toster7416
    @toster7416 10 днів тому

    Оч интересно, я бы решал первым способом сначала - это сто процентов, потому что я тупой

  • @xintreavideo
    @xintreavideo 10 днів тому

    Непонятно, а почему нельзя левым указателем сразу прыгнуть к новой добавленной букве, если она оказалась повторной? Зачем по шагам двигать левый указатель?

    • @SayXaNow
      @SayXaNow 9 днів тому

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

    • @joumii
      @joumii 8 днів тому

      Это просто один из вариантов решения, где используется мало памяти. Решить как вы говорите тоже можно, использовать не set а map (char -> index), думаю интервьювер принял бы и то и то решение

    • @xintreavideo
      @xintreavideo 8 днів тому

      @@SayXaNow, судя по анимации, новая строка всегда начинается с одного символа. Так что можно вообще выкидывать или обнулять старый set и набирать новый.

    • @SayXaNow
      @SayXaNow 8 днів тому

      @@xintreavideo анимация как раз и говорит о том, что обнулять сет нельзя, в нем могут остаться уникальные символы начала следующей строки. ABCDAEFGH тут повторяется только A, но если ты обнулишь накопленный сет, то получишь AEFGH, тогда как верный ответ - BCDAEFGH

  • @metjoytv9723
    @metjoytv9723 10 днів тому

    А почему вместо второго внутреннего цикла (этапа сужения) просто не очистить сэт и поставить туда символ right - 1, и left ровнять right - 1

    • @metjoytv9723
      @metjoytv9723 10 днів тому

      Мне кажется будет работать так же хорошо, но более эффективно. Если интересно могу объяснить как и почему

    • @SayXaNow
      @SayXaNow 9 днів тому

      Это не будет работать вообще. Контрпример: строка ABCDAEFGН ваш метод вернет 6 (DAEFGН), а самая длинна подстрока равна 8 (BCDAEFGН) внутренний цикл должен удалить все элементы до совпавшего символа включительно, но не должен трогать остальные, стоящие правее от него, т.к. они являются началом новой уникальной строки.

  • @plumbumer8424
    @plumbumer8424 10 днів тому

    Спасибо, хорошее решение. Сам решал так же со стеком, однако массив проходил в прямом порядке. Как по мне так короче и проще для понимания, при аналогичной сложности по времени и памяти: def weather(arr): stk = [] # ( temperature, i ) res = [0] * len(arr) for i, cur in enumerate(arr): while stk and stk[-1][0] < cur: _, ix = stk.pop() res[ix] = i - ix stk.append((cur, i)) return res import random import time l = [random.randint(-40, 40) for _ in range(1000000)] s = time.time() r = weather(l) t = round((time.time() - s)*1000, 3) print(r, t, sep=" ")

  • @preved39
    @preved39 10 днів тому

    как все красиво и понятно, спасибо, Александр! Кстати, а где рисуется такая "интерактивная" анимация?

  • @MrGoodCatSCP
    @MrGoodCatSCP 11 днів тому

    Ай, как хорошо слушать и смотреть! Рад, что алгоритмы показали такое видео) Оффтопный вопрос: а что за монитор?

  • @maximkang4273
    @maximkang4273 11 днів тому

    Выглядит как задача для рекурсии))

    • @n1ret
      @n1ret 3 дні тому

      стек забьёшь

  • @ruslankrivoshein2893
    @ruslankrivoshein2893 11 днів тому

    Алгоритм Флойда или "зайца и черепахи", база

  • @ViamoX
    @ViamoX 12 днів тому

    O(n) * O(set)