- 17
- 4 137 799
Саша Лукин
United Kingdom
Приєднався 19 бер 2020
Живу в Лондоне, разрабатываю Android в Google, делаю обучающий контент.
Грабим Дома на Собеседовании в 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
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 на Динамическое Программирование: Количество Уникальных Путей
Алгоритм Дейкстры
можно просто 1 раз идти по масиву и добавлять колличество уникальних елементов до первого повоторения в новий масив, потом повторять подсчет с последнего уникального елемента, а потом просто взять наибольшое число нового масива.
Было интересно
Откуда у вас эти стрОку, подстрОку? Ведь строкА, а значит строкУ, а не стрОку?
Я обязательно выживу......
Я бы построчным вводом добавлял , сортировал массив и сравнивал первую и вторую позиции и как только они равны записал бы размер массива-1, а потом начинал бы со второго символа.
Не легче в каунт записывать на первом цыкле в каждый индекс сколько раз ты встретил число такое же или больше , а во втором цикле вернуть найбольший индекс каунт в котором записанное число равно или больше индекса
известно куда последний переезд - everybody comes to Hollywood.
чувак на серьёзе рассказывает как решать 24 задание (из 27) из егэ по информатике..
реализация "простого" решения убила... я даже и не подумал что так можно XD
После того как мы посчитали можно не сортировать, а работать непосредственно с массивом подсчитанных значений. Идём с конца и если значение больше или равно индексу, то возвращаем его, если нет , то увеличиваем следующее значение (индекс - 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] } }
Я бы хотел поправить автора видео. Дело в том, что приобьяснении он говорит про итерацию по числам справа. Но по делу, скрипт работает с нулевым и последующими елементами. Для того, что бы реализовать процесс как было обьясненно. Нужно ко второму циклу накинуть +1 и в сумму в первом цикле обьявить как елемент по которому итерируемся.. плюс условия по проверке так же изменить на начало.
А с микрофоном (петличкой) было бы намного приятнее слушать ;-)
20:59 позволю себе ремарку: `answer = Math.max(answer, maxLeftPath + maxRightPath + node.val);` ☝тут в `answer` будет записан 0 если на входе корень без детей, но с отрицательным значением или если в дереве только отрицательные значения ; мне кажется, нужно перед вызовом `helper()` инициализировать `answer = root.val`
"математик сделает лучше" с Савватеевым разбирали эту задачу. Найти решение можно просто, если ты олимпиадник. Если в компанию нужны олимпиадники, то хорошая задача
От души братишка, под пиво вечерком посмотреть самое оно!
Какой еще BFS?! Эта задача для доски бесконечного размера, хоть по той же ссылке на leetcode.
Крутецки всё объяснил! Спасибо!
А мне показалось, что надо начинать с середины матрицы по типу двоичного поиска: 16 > 14, поэтому примерно четверть матрицы вправо и вниз от 16-ти не подходит. И т.д....
А тараканы водятся в этих квартирах?
В какой проге анимацию делаете?
но вы же второй при перемещении left тоже опять перебираете, не проще ли использовать std::map, хранить там позицию символа и сразу смещать позицию на искомый символ+1
динамическое программирование?? не метод математической индукции?
Что на счёт знания английского?
Не забывайте упомянуть ссылаясь на Яндекс, что они там такие задачки решают на листочке карандашом.
Наконец-то dyversity inclusif задачи от гугл
Можно слоями, а можно просто назначить вес каждой клетке.
Что за бред 😮 Яндекс так обучает ??))
это разве не первая задача литкода?)
на самом деле работает это немного иначе, да и хеш таблица и множество немного разные структуры данных. wiki: Красно-чёрные деревья являются одними из наиболее активно используемых на практике самобалансирующихся деревьев поиска. В частности, контейнеры set и map в большинстве реализаций библиотеки STL языка C++[3], класс TreeMap языка Java[4], так же, как и многие другие реализации ассоциативного массива в различных библиотеках, основаны на красно-чёрных деревьях. возможно где-то это и работает тем способом, что изложил автор, но явно не везде. за материал - отдельное спасибо. сделано хорошо. но вот с тем, как это работает на самом деле я бы поспорил. если кто-то хочет сам проверить как это работает(исходя из того, что утверждает автор), то самый простой и логичный способ - замеры времени получения того или иного элемента из коллекции. всем хорошего дня!
Похоже это уже устоявшаяся не правильная практика, на собеседование давать подобные алгоритмические задачи при том, что они не имеют обсолютно никакого отношению к работе кандидата. А решение подобных задач это отдельный скил, который часто присушь тем, кто занимался соревновательным программированием.
При добавление нового элемента он же вроде попадает в начало цепочки, поэтому и количество коллизий не влияют на время выполнения операции.
У меня решение лучше и работает с нечетными циклами - идём по списку и разворачиваем ссылки обратно. На каждом шаге проходим назад по обновленным ссылкам и проверяем встречалась ли эта вершина. По расходу памяти тоже самое, два указателя. Развернуть связи обратно не проблема, но в условиях это не требовалось. Смысл алгоритма в том, что двигаясь в обратном направлении всегда приходишь в начальную точку или упираешься в искомое, т.е. операция поиска конечна. Надеюсь я не первый придумал этот алгоритм 😂
А вот и спасибо)
Алгоритм Ахиллеса и черепахи, ещё применяется для поиска цикла в алгоритмах псевднорандома🤓
Пары парятся, а тройки движутся...
Спасибо за bfs! Но в аналитическом решении сложность О(1). N = (lnl + lml)/3 ± 4. Начальные координаты коня (0,0), конечные (n, m). Если рассмотреть как ходить в конце (варианты), то формула будет без погрешностей.
Похожие задания можно встретить на ЕГЭ по информатике. Получается что экзамен подготавливает нас не к ВУЗу, а сразу к собеседованию😅
О а не подскажите через что вы делаете скрытие контента а потом его появление, по клику ?
Интересно, сочетается ли это с рекурсией и есть ли смысл в рекурсии или выгоднее просто перезаписывать последние два значения. Есть ли задачи на динамическое программирование в которых рекурсия выгоднее буфера?
Практически любая задача на ДП канонически решается через рекурсию, а только потом оптимизируется, если есть необходимость. 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. Вот и все. Можно оставить в таком виде, а можно оптимизировать дальше, заменив передачу массива на индексы, переписать рекурсию в цикл (вариант из видео), уменьшить затраты памяти до константы (если есть возможность) и т.д.
Privet! Otlichni kanal! Sdelai razbor na zadachu pro permutations. Eto zadacha bila na sobesedovanii v Amazon.
Оч интересно, я бы решал первым способом сначала - это сто процентов, потому что я тупой
Непонятно, а почему нельзя левым указателем сразу прыгнуть к новой добавленной букве, если она оказалась повторной? Зачем по шагам двигать левый указатель?
внутренний цикл должен удалить все элементы до совпавшего символа включительно, но не должен трогать остальные, стоящие правее от него, т.к. они являются началом новой уникальной строки.
Это просто один из вариантов решения, где используется мало памяти. Решить как вы говорите тоже можно, использовать не set а map (char -> index), думаю интервьювер принял бы и то и то решение
@@SayXaNow, судя по анимации, новая строка всегда начинается с одного символа. Так что можно вообще выкидывать или обнулять старый set и набирать новый.
@@xintreavideo анимация как раз и говорит о том, что обнулять сет нельзя, в нем могут остаться уникальные символы начала следующей строки. ABCDAEFGH тут повторяется только A, но если ты обнулишь накопленный сет, то получишь AEFGH, тогда как верный ответ - BCDAEFGH
А почему вместо второго внутреннего цикла (этапа сужения) просто не очистить сэт и поставить туда символ right - 1, и left ровнять right - 1
Мне кажется будет работать так же хорошо, но более эффективно. Если интересно могу объяснить как и почему
Это не будет работать вообще. Контрпример: строка ABCDAEFGН ваш метод вернет 6 (DAEFGН), а самая длинна подстрока равна 8 (BCDAEFGН) внутренний цикл должен удалить все элементы до совпавшего символа включительно, но не должен трогать остальные, стоящие правее от него, т.к. они являются началом новой уникальной строки.
Спасибо, хорошее решение. Сам решал так же со стеком, однако массив проходил в прямом порядке. Как по мне так короче и проще для понимания, при аналогичной сложности по времени и памяти: 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=" ")
как все красиво и понятно, спасибо, Александр! Кстати, а где рисуется такая "интерактивная" анимация?
Ай, как хорошо слушать и смотреть! Рад, что алгоритмы показали такое видео) Оффтопный вопрос: а что за монитор?
Выглядит как задача для рекурсии))
стек забьёшь
Алгоритм Флойда или "зайца и черепахи", база
O(n) * O(set)