Тёмный
Alexandr Kazakov
Alexandr Kazakov
Alexandr Kazakov
Подписаться
Мой телеграм канал Алгоритмы + Собесы: t.me/+S8ShwNRNqCZmNWY6
[RU] LeetCode 67 Add Binary [JavaScript]
16:05
5 месяцев назад
[RU] LeetCode 476  Number Complement [JavaScript]
17:10
5 месяцев назад
[EN] LeetCode 476  Number Complement  [JavaScript]
10:40
5 месяцев назад
[RU] LeetCode 36 Valid Sudoku [JavaScript]
18:45
6 месяцев назад
[RU] LeetCode 57 Insert Interval [JavaScript]
23:52
6 месяцев назад
[EN] LeetCode 169  Majority Element [JavaScript]
10:41
6 месяцев назад
[RU]  LeetCode 169  Majority Element [JavaScript]
12:39
6 месяцев назад
[EN] LeetCode 189 Rotate Array [JavaScript]
8:05
7 месяцев назад
[RU] LeetCode 189  Rotate Array [JavaScript]
8:04
7 месяцев назад
[RU] LeetCode 49  Group Anagrams [JavaScript]
17:15
7 месяцев назад
[RU] LeetCode 54  Spiral Matrix [JavaScript]
16:42
8 месяцев назад
[RU] LeetCode 48  Rotate Image  [JavaScript]
18:17
8 месяцев назад
[RU] LeetCode 733  Flood Fill [JavaScript]
16:01
8 месяцев назад
[RU] LeetCode 100  Same Tree [JavaScript]
19:33
8 месяцев назад
Комментарии
@blessedpigeon6304
@blessedpigeon6304 24 дня назад
46:55 ваще не понял как сортировкой можно тут что-то решить. Сортировка перетрёт порядок цифр и по-умолчанию сделает массив монотонным, поэтому вообще не понимаю, в чем идея. Я думаю что интервьюер тоже не поняла ничего
@ivanbursky
@ivanbursky 19 дней назад
скорее всего идея была сортировать два раза - по возрастанию и по убыванию. А затем привести к строкам исходный массив и два сортированных. Если хотя бы в одном случае строки совпадут, то значит исходный массив монотонный.
@blessedpigeon6304
@blessedpigeon6304 19 дней назад
@@ivanburskyтогда проще один раз отсортировать и пройтись сначала по убыванию, потом по возрастанию, две сортировки тут не нужны ну и приведение к строкам тоже Ну и просто по памяти и сложности конечно проигрывающий вариант Таким вариком можно хорошо зарекомендовать себя как любителя оверинжениринга)
@Userffffff
@Userffffff Месяц назад
Собеседуемый, молодец, так надо уметь разговор поддерживать. 1. Задача, можно рекурсией можно в цикле for разбиваем путь через split('.'), получаем ключ и остаток пути, и передаем их дальше вызывая эту же функцию и делаем два выхода один когда у нас путь закончится, будет длиной 0, второй когда obj будет undefined возвращаем undefined. function get(obj, path) { if (path.length === 0) { return obj } if (obj === undefined) { return undefined } const [key, ...rest] = path.split('.'); return get(obj[key], rest.join('.')) } на цикл function get(obj, path) { let result = { ...obj }; const paths = path.split('.') for (const key of paths) { result = result[key] if (result === undefined) { return undefined } } return result; } 2. через массив чтобы таких условий не делать, хотя все равно не идеально :( function rle(str) { const result = []; let pointer = str[0]; for (let i = 1; i < str.length; i++) { if (pointer[0] === str[i]) { pointer += str[i] } else { result.push(pointer) pointer = str[i] } } result.push(pointer); return result.map(letter => letter.length === 1 ? letter : `${letter[0]}${letter.length}`) .join('') }
@dididie158
@dididie158 Месяц назад
Спасибо за видео. Недавно тоже первый этап проходил, все задач разные, но у нас с тобой схожи с retryFetch)
@alexandrkazakov723
@alexandrkazakov723 Месяц назад
@@dididie158 а какие у тебя задачи были?
@artyomkrasavin1245
@artyomkrasavin1245 Месяц назад
а какой результат? позвали на второй этап?
@alexandrkazakov723
@alexandrkazakov723 Месяц назад
да, позвали на второй этап, там было только две задачки, уже алгоритмические, я их также решил
@tovarishdobegls6465
@tovarishdobegls6465 Месяц назад
Устроился в итоге в компанию? Надеюсь, что да
@ВиталийКимович-е6ф
Добрый день, в обозримом будущем хотелось бы попасть на стажировку в яндекс, может быть уважаемые господа дадите совет или направление, на что сделать упор в задачах и какого уровня примерно спрашивают задачи на позицию стажера. Пока решаю codewar, задачи 6k даются сложно.
@alexandrkazakov723
@alexandrkazakov723 Месяц назад
Leetcode популярен, вот план обучения: leetcode.com/explore/featured/card/the-leetcode-beginners-guide/679/sql-syntax/4358/
@whitespace2925
@whitespace2925 Месяц назад
Это на какой уровень, джуниор или мидл?
@alexandrkazakov723
@alexandrkazakov723 Месяц назад
Об этом тебе никто прямо не скажет. Могу только сказать, что на видео один из этапов с лайвкодингом.
@einz7293
@einz7293 Месяц назад
стажировка яндекса
@Psoglawec
@Psoglawec Месяц назад
Ппц. Школьные бесполезные задачки которые на курсах пихают. А я то думал, нафига вместо практики на курсах именно эти тупорылые задачи, которые ничему практическому не учат и только отбивают желание дальше учиться. А их оказывается на собесах подсовывают. А знания, которые в реальной практике в основном используют, на собесах интересуют вообще или там только такую тупость спрашивают? Вот на курсах учат этим тупорылым задачкам, а потом в конце как дубиной по башке "напиши сайт". Походу всё как в жизни, на собесе тупость эту школьную, а как прошел собес занимаешься абсолютно другими делами.
@ДанилДмитриев-я5м
@ДанилДмитриев-я5м 2 месяца назад
вторая задача, мое решение
@ДанилДмитриев-я5м
@ДанилДмитриев-я5м 2 месяца назад
function countStr(str) { let count = 0; let res = ""; for (let i = 0; i < str.length; i++) { if (str[i] === str[i + 1]) { count++; } else if (count === 0 && str[i] !== str[i + 1]) { res = res + str[i]; } else { count++; res = res + str[i] + count; count = 0; } } return res; }
@ДанилДмитриев-я5м
@ДанилДмитриев-я5м 2 месяца назад
спасибо
@psevdonim257
@psevdonim257 2 месяца назад
все это хорошо, но КАК попасть на собеседования? КААААК?
@alexandrkazakov723
@alexandrkazakov723 2 месяца назад
@@psevdonim257 ищи на линкедин разрабов которые работают в нужных тебе компаниях , пиши им и проси рефералку. В большинстве топ компаний есть рекомендательная реферальная система.
@psevdonim257
@psevdonim257 2 месяца назад
@@alexandrkazakov723 вариант, спасибо, сначала надо хороший впн чтоб все завелось
@psevdonim257
@psevdonim257 2 месяца назад
так оффер предложили по итогу?
@renat7797
@renat7797 2 месяца назад
4) function mon(nums) { let isMon = true let monType = 0 if(nums.length < 3) { return true } for (let i = 1, prevNum = nums[0]; i < nums.length; i++) { const currNum = nums[i] if (currNum !== prevNum) { diffSign = Math.sign(currNum - prevNum) if (monType === 0) { monType = diffSign } else if (monType !== diffSign) { isMon = false break } } prevNum = currNum } return isMon }
@topsy_kreds
@topsy_kreds 2 месяца назад
слабо, очень много нелепых комментариев от тебя по ходу собеса, которыми себя же и зарываешь, создается впечатление, что ты не понимаешь о чем говоришь, даже если это не так. Хоть и атмосфера на собесе - "дружеская беседа", это все еще собеседование и любое твое слово будет использовать против тебя в фидбэке) удачи в обучении
@alexandrkazakov723
@alexandrkazakov723 2 месяца назад
@@topsy_kreds видимо комментарий мне, но я и второй раунд алгоритмическую секцию успешно прошел. И все это с первого раза, если это слабо, то что же, меня такая слабость устраивает 🙂
@topsy_kreds
@topsy_kreds 2 месяца назад
@@alexandrkazakov723 я так понимаю собесы были на стажировку?
@alexandrkazakov723
@alexandrkazakov723 2 месяца назад
@@topsy_kreds нет конечно, какая стажировка.
@Psoglawec
@Psoglawec Месяц назад
Так и надо. Именно рассуждения в слух на собесах и любят. Видимо с молчунами им скучно и заворачивают если конечно это не сеньор которому никакие собесы не нужны.
@topsy_kreds
@topsy_kreds Месяц назад
@@Psoglawec я не против рассуждений в слух, просто тут человек местами чепуху говорит
@odinokium
@odinokium 2 месяца назад
28:41 "Ну давай оценю сложность алгоритма🥺🥺🥺" Боже, как он ее упрашивал)) Ведь готовился
@IT_psychopath
@IT_psychopath 3 месяца назад
первая банальная задача.. но очень хорошо показывает опыт программиста и его харды. у вам хеш таблица и путь это ключи! какая нафиг рекурсия..😂 задача на знание js и структур данных. читайте ребят книги! они очень полезные.. кто знает как распаковать объект? вот вам и ответ на задачу. учите структуры данных!..
@ЕгорПутятов
@ЕгорПутятов 17 дней назад
Блять я не знаю почему, но мне запал в душу этот коммент. Хочу быть таким же умным и знать дохуя
@yagamilite6613
@yagamilite6613 3 месяца назад
Слишком кипишной как будто ,очень много лишних вопросов задавал ,которые не нужны ,особенно в моменте «да давай я оценю сложность алгоритма ?»😃
@alexandrkazakov723
@alexandrkazakov723 3 месяца назад
Сложность оценки алгоритма обязательно нужно называть на подобного рода собесах. После этого был второй алгоритмический этап, там две алгоритмические задачи было, прямо спрашивают сложность алгоритма, если ты не не говоришь. А про компании уровня фаанг я молчу.
@blessedpigeon6304
@blessedpigeon6304 24 дня назад
​@@alexandrkazakov723 сложность надо говорить если спрашивают)) если не спрашивают, значит она тривиальная и ты тупо селф репортишь на себя, что для тебя это достижение - посчитать сложность выполнения/памяти
@alexandrkazakov723
@alexandrkazakov723 24 дня назад
@@blessedpigeon6304 я просто люблю алгоритмические задачки решать и оценивать сложность алгоритма, умею это хорошо. Вот это я репорчу
@blessedpigeon6304
@blessedpigeon6304 24 дня назад
@@alexandrkazakov723 всё-таки совет не очень. лучшим советом будет следовать за интервьюером, не пытаться как-то что-то сверху сбоку придумать-додумать)
@ЕвгенийКобзев-ь8ь
@ЕвгенийКобзев-ь8ь 3 месяца назад
4 задача как вариант. function isMonotonic(num) { const mono1 = [...num].sort((a, b) => a - b); const mono2 = [...num].sort((a, b) => b - a); if (mono1.join('') === num.join('') || mono2.join('') === num.join('')) { return true; } return false; }
@EgorMoscowNeverSleep
@EgorMoscowNeverSleep 3 месяца назад
Вы 8 раз пробежались по массиву. Спасибо, но нам в программировании такого не нужно.
@ЕвгенийКобзев-ь8ь
@ЕвгенийКобзев-ь8ь 3 месяца назад
@@EgorMoscowNeverSleep Да ладно, мне не жалко
@OmonOmon-tr4du
@OmonOmon-tr4du 3 месяца назад
Типатиптатптаитипатипатипатипатипа
@siberian-crystall
@siberian-crystall 3 месяца назад
привет! посмотрел с интересом, в процессе накидывал решения :) 1 задачу сделал бы так: function get(obj, chain) { return chain?.split('.').reduce((acc, key) => acc?.[key], obj); } 2 можно тоже в одну строку, гораздо быстрее (для достаточно длинных строк - на порядок) будет регуляркой: function rle(input) { return input.match(/(\w)\1*/g).reduce((acc, v) => acc += v[0] + (v.length > 1 ? v.length : ''), ''); } 3 ваше решение нерабочее по нескольким причинам: интерпретатор ругнётся на return throw (уже писали в комментах) + если после неудачной попытки будет успешная - первый Promise из call stack всё равно не будет заресолвлен. я бы реализовал так: function get(url) { return new Promise(async (resolve, reject) => { let retries = 5; while (retries) { await fetch(url) .then((res) => { if (!res.ok) throw new Error(); // сюда попадёт, например, ошибка 500 resolve(res); retries = 0; }) .catch((e) => (retries--)); } reject('Retry count exceeded'); }); } 4 function isMonotonic(array) { return array.reduce((acc, value, index) => { if (acc.result && index) { const delta = Math.sign(value - array[index - 1]); if (acc.sign && delta && delta != acc.sign) acc.result = false; acc.sign = delta; } return acc; }, { sign: 0, result: true }).result; }
@alexandrkazakov723
@alexandrkazakov723 3 месяца назад
Ваше решение второй задачи вызывает вопросы, сложно написать такую регулярку на собесе и не ошибиться. Также мне кажется, что столь короткая запись может быть непонятна интервьюверу и это в минус пойдет.
@EgorMoscowNeverSleep
@EgorMoscowNeverSleep 3 месяца назад
@siberian-crystall Ваши решения конечно же гораздо лучше и самое главное - рабочие (в отличие от например, решения задачи 3 на видео). Однако в ваших решениях 1 и 4 есть недостаток: отсутствует предварительный выход из-за использования непрерываемых массивных методов. Т.е., алгоритм в любом случае переберёт весь массив, даже если мы уже можем сделать однозначный вывод, что результат undefined или false. В задаче 4 лучше всего воспользоваться циклом с предварительным return false, а в задаче 1 - рекурсивной функцией или циклом с предварительным return void 0. А задача 2 может быть решена ещё проще и оптимизированее: function rle(input) { return input.replace(/(\w)\1{1,}/g, (str, char) => char + str.length); } Однако отмечу, что попытка решить сложные задачи используя минимальное количество строк кода - не лучшая привычка. Код должен быть очевиден для того, кто его будет читать и пусть код будет многословен - минификаторы за вас его сожмут на этапе билда проекта.
@siberian-crystall
@siberian-crystall 3 месяца назад
@@EgorMoscowNeverSleep Отличное дополнение, благодарю! Всё по делу)
@КириллЗеленский-н7й
В 4 задачке, можно заранее узнать какой мы ожидаем массиив, и исходя этого закинуть в метод every лямбду.
@СветланаАндреевна-х8р
Ваши видео с решениями просто клад! Наконец то ютуб показал мне ваш канал
@SergiyAntonyuk_PhD
@SergiyAntonyuk_PhD 3 месяца назад
Третья задача: if(counter === 5) { throw new Error("3aдданный URL недоступен") ; } else { ...} return при выбрасывании ошибки не нужен (его наличие вызовет ошибку) Четвертая задача: function isMonotonic(numbers) { if (numbers.length <= 2) return true; let type = numbers[1] - numbers[0]; // Determine monotonicity type in one step for (let i = 2; i < numbers.length; i++) { if ( (type > 0 && numbers[i] < numbers[i - 1]) || (type < 0 && numbers[i] > numbers[i - 1]) || (type == 0 && numbers[i] !== numbers[i - 1]) ) { return false; } } return true; }
@siberian-crystall
@siberian-crystall 3 месяца назад
ваше решение вернёт false для массива [1, 1, 2, 3], потому что определяет направление монотонности только по паре первых значений
@ВасилийЛазаренко-у3я
​@@siberian-crystallтак и должно быть
@тимур_атмосферный
@тимур_атмосферный 3 месяца назад
Первая задача. Можно в одну строчку сделать или наоборот подробнее разложить. Ненавижу читать рекурсию + я могу ошибаться, но у тебя !object[array[i]] вернет undefined для null function get(initialObject, path) { return path.split('.').reduce((currentObject, currentKey) => { if (!(currentKey in currentObject)) { return undefined; } return currentObject[currentKey]; }, initialObject); }
@КириллЗеленский-н7й
У редьюса проблема, что он всегда пройдет до конца массива, а нам после первого же undefined можно прекратить итерироваться по массиву
@тимур_атмосферный
@тимур_атмосферный 14 дней назад
​@@КириллЗеленский-н7й да, а еще проверять через property in obj это я неправильно сделал, через for..of и hasOwn можно сделать: function get(obj, path) { const properties = path.split("."); let current = obj; for (const property of properties) { const hasProperty = Object.hasOwn(current, property); if (!hasProperty) return undefined; current = current[property]; } return current; }
@Вбелом-й3з
@Вбелом-й3з 3 месяца назад
задачи простые. сложно походу только на собес попасть. не.. ну понятно, что простые для тех кто задрачивал leetcode.
@alexandrkazakov723
@alexandrkazakov723 3 месяца назад
Там ещё второй алгоритмический этап, две задачи были, также не сложные, но из-за волнения всякое может случиться…
@topsy_kreds
@topsy_kreds 2 месяца назад
хотите сказать что, чтобы решить первую задачу надо задрачивать литкод?
@Вбелом-й3з
@Вбелом-й3з 2 месяца назад
@@topsy_kreds ты уже работаешь в яндексе?
@einz7293
@einz7293 Месяц назад
Попасть просто, стажировки яндекс напишите в поисковике и на официальном сайте найдете инструкцию
@ЕвгенийТ-ч8в
@ЕвгенийТ-ч8в 3 месяца назад
В задаче про массив забавные условия на 7-8 строках (присвоение вместо сравнения) ) Понятно, что это просто опечатка, но собеседующая добрая (или не обратила внимание).
@enoughfornow7310
@enoughfornow7310 4 месяца назад
ага ага ага ага ага ага угу угу угу угу угу угу ага ага ага ага
@MyNameIsEd2d2
@MyNameIsEd2d2 4 месяца назад
Братец, а остальные этапы писать будешь? Я про алгосекцию и платформу?
@alexandrkazakov723
@alexandrkazakov723 4 месяца назад
Привет, второй этап я также успешно прошел, там было две алгоритм задачки, но его к сожалению я его не записал, можешь в тг моем увидеть что за задачи там были. Третий этап полностью разговорный, там не сильно интересно, вопросы про опыт и на софт скиллы
@ЕвгенийТ-ч8в
@ЕвгенийТ-ч8в 3 месяца назад
​@@alexandrkazakov723у меня было 4 финала и на одном из них так же были задачки. на 3-х других только разговоры. Так-что от команды все-таки зависит.
@tillfurthernotice-k5x
@tillfurthernotice-k5x 3 месяца назад
@@alexandrkazakov723 Тебе предложили офер в итоге? И какая вилка была если не секрет
@СветланаАндреевна-х8р
@@alexandrkazakov723 как найти ваш тг?
@atlantatesla9348
@atlantatesla9348 5 месяцев назад
Спасибо за объяснение!
@zemamba
@zemamba 7 месяцев назад
Всё классно, но смущает то что у вас вызывают сложности легкие и немного средних задач, я не являюсь программистом и прорешал уже более 700 :) просто в удовольствие, хотя у вас как вы говорите 5 лет опыта ) вакансии есть?)))
@alexandrkazakov723
@alexandrkazakov723 7 месяцев назад
Яндекс, гугл, майкрософт, Амазон, мета и многие другие крупнейшие компании просят решить подобные компании на своих собесах, я бы советовал вам туда пробовать устраиваться
@alexandrkazakov723
@alexandrkazakov723 7 месяцев назад
Ещё кстати, если вы только учитесь в универе, то обязательно стоит пробовать в фаанг со знаниями алгоритмов, так как у них есть программы стажировки. Английский только стоит подтянуть и потренить
@denisrozhko2772
@denisrozhko2772 6 месяцев назад
скинь ссылку, а то мне чет не особо верится что не программист, но 700 решил
@alexandrkazakov723
@alexandrkazakov723 6 месяцев назад
да, 700 задач это очень много, это годы регулярного решения задач
@Sightools
@Sightools 7 месяцев назад
You’re speaking English very well and understandable 👍
@Sightools
@Sightools 7 месяцев назад
Да, впечатляет, молодец!
@ИванФедяков-с3ч
@ИванФедяков-с3ч 7 месяцев назад
мужская задача
@AndreiSokolov-k7j
@AndreiSokolov-k7j 7 месяцев назад
Классное видео! Я как раз решил изучить алгосы и начал смотреть видосы с малой практикой. Но благо наяал понимать, что особ смысла в глупой теории нет, надо сначало самому попытаться решить задачу, а если не вышло, то посмотреть теорию, вот это самый лучший способ их изучить
@vadim_matsul
@vadim_matsul 7 месяцев назад
Подвел итоги 200 задач, приятно слушать 🔥Молодец
@priyanshujha473
@priyanshujha473 9 месяцев назад
Thanks for the wonderful explanation bro. keep the good work going.
@vadim_matsul
@vadim_matsul 9 месяцев назад
не самая сложная задача для записи, но за твой потенциал объяснить людям принцип работы алгоритма - респект, продолжай)
@magary4er
@magary4er 9 месяцев назад
well done
@tahavirdiwala4881
@tahavirdiwala4881 10 месяцев назад
How about english?
@alexandrkazakov723
@alexandrkazakov723 10 месяцев назад
Sure, but later