Task from a front-end interview: Finding the largest container of water | JavaScript

  Рет қаралды 21,805

Front-end Science with Sergey Puzankov

Front-end Science with Sergey Puzankov

Күн бұрын

Привет, друзья!
Продолжаем решать задачки с собеседований! Сегодня у нас интересная задача про воду - нам необходимо найти контейнер, вмещающий максимальное количество воды (11. Container With Most Water). Эта задача помечена Medium уровнем сложности на Leetcode.
На вход нам подается массив с числами. Каждое число представляет собой вертикальную линию заданной высоты. Все линии находятся друг от друга на расстоянии 1. Нам необходимо найти такие 2 линии (2 числа) из этого массива, которые, образуя "контейнер", дадут максимально возможное количество воды. В качестве ответа необходимо вернуть максимальный "объем" воды для данного массива с числами.
Для решения данной задачи мы будем использовать популярный алгоритм с двумя указателями (two pointers).
Длина массива от 2 до 100 000. А значения в массиве могут быть от 0 до 10 000.
По условию это все.
Забыл упомянуть в видео, что сложность получившегося алгоритма с двумя указателями по времени у нас линейная O(n), а сложность по памяти - константа O(1).
👍 Присылайте ваше решение в комменатриях! С интересом посмотрю!
👍 Друзья, поддержите наш канал - поставьте этому видео лайк и поделитесь им с друзьями!
Таймкоды:
00:00 Интро
00:33 Условие задачи
02:30 Алгоритм решения брутфорсом
04:04 Алгоритм решения через два указателя
06:39 Пишем код
10:11 Проверяем решение
10:53 Присылайте ваши решения
✅ Задача на Leetcode: leetcode.com/problems/contain...
✅ Код из видео: codepen.io/puzankov/pen/ZEyKm...
👍 🤩 Будем благодарны за поддержку нашего канала на Патреоне: / frontendscience
---
Если видео было для вас полезным, ставьте лайк и поделитесь им с друзьями.
Подписывайтесь на наш канал: bit.ly/fs-ytb
---
Присоединяйтесь к нам в соцсетях:
FB: / frontendscience
Instagram Сергея Пузанкова: / puzankovcom
Заходите на наш сайт: frontend-science.com/
Music:
Blue Wednesday "From a friend",
Blue Wednesday & Dillan Witherow - Long Walk Short Dock.
---
#ityoutubersru​ #фронтенд #алгоритмы #leetcode

Пікірлер: 122
@frontendscience
@frontendscience 2 жыл бұрын
Забыл упомянуть в видео, что сложность получившегося алгоритма с двумя указателями по времени у нас линейная O(n), а сложность по памяти - константа O(1).
@inzagher
@inzagher 2 жыл бұрын
Пока не буду досматривать видео, попробую решить на литкоде) На первый взгляд просится алгоритм с квадратичной сложностью, а оказывается, можно и одним проходом справиться. Очень круто)
@MrNonameous
@MrNonameous 2 жыл бұрын
А где доказательство, что такое решение будет максимальным?
@frontendscience
@frontendscience 2 жыл бұрын
@@MrNonameous В видео. Как бы странно это ни звучало) Весь алгоритм построен на принципе максимизации объема. Что я и объяснял в видео.
@user-or1hy4xz8u
@user-or1hy4xz8u 2 жыл бұрын
А если попадутся 2 одинаковые по высоте линии? Как тогда перемещать указатель?)))
@user-ol7mk4sh6i
@user-ol7mk4sh6i 2 жыл бұрын
@@user-or1hy4xz8u если две одинаковые по высоте линии тогда без разницы какой указатель двигать. (В видео двигается правый указатель)
@raykovskyy
@raykovskyy 2 жыл бұрын
Ты уйдёшь, так и не узнав, что самый большой контейнер с водой - это моя дипломная работа...
@user-to7we3ox4h
@user-to7we3ox4h 2 жыл бұрын
😂 Ай красавчик!!! Лучше и не скажешь.... Вспомнил как свою дипломную писал!!!
@valvetigu5207
@valvetigu5207 2 жыл бұрын
Я не програмер, учился в меде. И должен вас поправить. Гомеопатия - о где главная вода!
@yurypetukhou3137
@yurypetukhou3137 5 ай бұрын
Что бы я без вас дела ) Спасибо огромное
@multiply87
@multiply87 2 жыл бұрын
Просто кайфую от твоих алгоритмов)
@frontendscience
@frontendscience 2 жыл бұрын
Благодарю! Радуюсь)
@user-nl1uh5tq2z
@user-nl1uh5tq2z 2 жыл бұрын
Огромное спасибо за полезный контент и доступное объяснение!!))
@user-dw4pi5gy7t
@user-dw4pi5gy7t 5 ай бұрын
Большое вам спасибо
@theoddorrrrr
@theoddorrrrr 2 жыл бұрын
Нереально годный контент, спасибо!
@frontendscience
@frontendscience 2 жыл бұрын
Класс! И Вам спасибо 😉
@anton-vr5xw
@anton-vr5xw 2 жыл бұрын
Хорошая задача, и сама подача видео отличная, спасибо огромное 😌
@frontendscience
@frontendscience 2 жыл бұрын
Класс! И Вам спасибо :)
@user-ts9wm1gi3b
@user-ts9wm1gi3b 2 жыл бұрын
Нереально крутой контент🔥🔥🔥👍👍👍 Сергей, огромное спасибо за обзор и решение различных задач🤝 много полезного и интересного узнал из твоих видео👍 не сомневаюсь, что в скором времени будешь в трендах на первых местах😉 такой колоссальный труд обязательно будет оценён 💪
@frontendscience
@frontendscience 2 жыл бұрын
Ваау! Как приятно! Благодарю за поддержку и вдохновение! 🚀
@user-xq3vg8em5u
@user-xq3vg8em5u 2 жыл бұрын
Сергей, с праздником Вас!) Спасибо большое за видео, очень интересно и доходчиво. Жду с нетерпением новых🔥👍
@frontendscience
@frontendscience 2 жыл бұрын
Вау! Точно! И Вас с праздником! 🎈🚀🎉 Спасибо большое за поддержку! Будем стараться))
@russellnewmanmirny5556
@russellnewmanmirny5556 2 жыл бұрын
Очень Интересно!!! Спасибо!!! Крутой канал!
@frontendscience
@frontendscience 2 жыл бұрын
Класс! Рады слышать :) Благодарим за поддержку!
@oleksandrzz
@oleksandrzz 2 жыл бұрын
отличная задачка и классное решение!
@aleksberg3686
@aleksberg3686 2 жыл бұрын
Гений!!! Все так просто решается!!! Код простой но с продуманой логикой. Благодарю за видео!!!
@frontendscience
@frontendscience 2 жыл бұрын
Благодарю Вас за поддержку! Рад, что было полезно)
@oleksandrvoron_ko580
@oleksandrvoron_ko580 2 жыл бұрын
Як завжди круто і все чітко роз'яснено! Признаюся не рішав але код в кінці ясний, це вже хоч щось, коли розумієш рядки коду))
@frontendscience
@frontendscience 2 жыл бұрын
Да, это действительно хороший показатель. Через пару недель попробуйте вернуться к задаче, пересмотреть условие и попробовать решить по памяти. 👍
@Sleep88Walker
@Sleep88Walker 2 жыл бұрын
Хорошая подача, приятная графика
@frontendscience
@frontendscience 2 жыл бұрын
Благодарю за поддержку! Рад, что понравилось)
@Neravarinn
@Neravarinn 2 жыл бұрын
Приветствую. Спасибо за очередную головоломку)) Недавно начал изучать js и впервые смог решить вашу задачку. К сожалению не додумался до самого оптимального способа, поэтому решил через 2 цикла. function maxArea(heights){ let area =0 let areaMax =0 if (heights.length>=2 & heights.length
@frontendscience
@frontendscience 2 жыл бұрын
Круто, что нашли решение! На собеседованиях чаще всего с этого начинают - и потом по подсказкам ищут более оптимальное решение! Успехов Вам!
@magbear3205
@magbear3205 2 жыл бұрын
Больше подобного контента
@Ivan-ei5cc
@Ivan-ei5cc 2 жыл бұрын
Похоже рекомендации подсказали хороший канал:)
@frontendscience
@frontendscience 2 жыл бұрын
Рады Вам! :)
@maxleichenko5685
@maxleichenko5685 2 жыл бұрын
Качество видео на высоте! Сколько времени у тебя занимает подготовка одного видео?
@frontendscience
@frontendscience 2 жыл бұрын
Благодарю, приятно слышать) Очень по-разному. На это ушло 3 вечера - съемка и монтаж с отрисовкой анимации. Я ж в свободное время это делаю.
@Sk1llahh
@Sk1llahh 2 жыл бұрын
Привет! Все хорошо, нравится твоя подача. Но можно ли музыку потише? Либо твой голос погромче
@frontendscience
@frontendscience 2 жыл бұрын
Забыли проверить без наушников в этот раз, учтем на будущее. Благодарим.
@wisarty
@wisarty 2 жыл бұрын
Дякую
@IsrafilGuseinov
@IsrafilGuseinov 2 жыл бұрын
Привет, мог бы дать совет, как прокачать нативку, если прям туго очень? Просто решать задачки с того же литкод? Или может есть ещё какие-нибудь варианты?
@frontendscience
@frontendscience 2 жыл бұрын
Привет. Под нативкой Вы имеете в виду нативный JS? или же алгоритмы?
@IsrafilGuseinov
@IsrafilGuseinov 2 жыл бұрын
@@frontendscience именно нативный, да)
@frontendscience
@frontendscience 2 жыл бұрын
@@IsrafilGuseinov ну тогда возможно какой-то курс по js пройти, чтобы систематизировать все знания и заполнить пробелы. Или например learnjavascript.ru почитать и поделать задачи.
@IsrafilGuseinov
@IsrafilGuseinov 2 жыл бұрын
@@frontendscience спасибо!!
@frontendscience
@frontendscience 2 жыл бұрын
@@IsrafilGuseinov успехов!
@MrJohnny23
@MrJohnny23 2 жыл бұрын
Подскажите какой ide использует автор на видео?
@frontendscience
@frontendscience 2 жыл бұрын
WebStorm
@MrJohnny23
@MrJohnny23 2 жыл бұрын
@@frontendscience спасибо, удобные фишки есть, но блин она платная) А если из бесплатных, какую бы могли посоветовать? (По опыту)
@frontendscience
@frontendscience 2 жыл бұрын
Других не использовал, поэтому, к сожалению, не могу подсказать.
@EvilYou
@EvilYou 2 жыл бұрын
Задачу решил, но решение мне самому не нравится, слишком уж громоздкое получилось. Можно сократить за счет функций, но тогда результат вместо "быстрее 85%" будет "быстрее 40%" :) Алгоритм решения: 1. В первом цикле for нахожу число, которое имеет наибольшую потенциальную площадь (если найдется идеальное второе число). 2. Во втором цикле прохожу по всем числам массива (кроме числа, которое получено в первом цикле) и нахожу то, которое в паре с первым даст максимальную площадь. 3. Может быть такой вариант, что найденная площадь хоть и близка, но не максимальна (это потому, что для расчета площади мы все равно берем наименьшее из двух и если первое число намного больше второго, никакой пользы это не принесет). Для этого начиная от первого числа до ближайшего конца массива ищу значение, которое в паре со вторым могло бы дать еще большую площадь. function maxArea(height) { let area = 0; const last = height.length - 1; let maxIndex; let maxHeight; let maxArea = 0; let secondIndex; let secondHeight; for (let i = 0; i < height.length; i++) { const current = height[i]; const maxDistance = Math.max(last - i, i); const maximalArea = maxDistance * current; if (maximalArea > maxArea) { maxArea = maximalArea; maxIndex = i; maxHeight = current; } } for (let i = 0; i < height.length; i++) { if (i === maxIndex) continue; const current = height[i]; const width = Math.abs(maxIndex - i); const currentArea = width * Math.min(maxHeight, current); if (currentArea > area) { area = currentArea; secondHeight = current; secondIndex = i; } } if (maxIndex > secondIndex) { for (let i = maxIndex + 1; i < height.length; i++) { let current = height[i]; const width = Math.abs(secondIndex - i); const currentArea = width * Math.min(secondHeight, current); if (currentArea > area) { area = currentArea; maxHeight = current; maxIndex = i; } } } else { for (let i = maxIndex - 1; i >= 0; i--) { let current = height[i]; const width = Math.abs(secondIndex - i); const currentArea = width * Math.min(secondHeight, current); if (currentArea > area) { area = currentArea; maxHeight = current; maxIndex = i; } } } return area; } Результат: Runtime: 84 ms, faster than 85.36% Memory Usage: 48.9 MB, less than 6.16% Сложность по времени: O(n) По памяти: O(1)
@frontendscience
@frontendscience 2 жыл бұрын
необычно вышло - благодарю за решение!
@ArtemkoOnly
@ArtemkoOnly 2 жыл бұрын
Что за ide используете?
@frontendscience
@frontendscience 2 жыл бұрын
WebStorm
@maratsultanov6462
@maratsultanov6462 2 жыл бұрын
День добрый, спасибо за интересный выпуск. А где можно найти такие же задачки, но для начинающих. Пока что сложно решать такого уровня... спасибо.
@frontendscience
@frontendscience 2 жыл бұрын
это задача Medium уровня. Можно посмотреть на задачки easy на leetcode. Или еще можно начать с задачек на codewars - выбрать 8 и 7 q там
@chcylabrab
@chcylabrab 2 жыл бұрын
@@frontendscience Сергей, подскажите, medium на литкоде каким уровням равен на коудварс(хотя б примерно)? я решал только на коудварс, потому интересно сравнить с литкодом свой уровень😀
@mikhailblush5261
@mikhailblush5261 2 жыл бұрын
о, отец выспался)
@nilsen1879
@nilsen1879 2 жыл бұрын
Привет, спасибо за видео. А как доказать, что с помощью 2 указателей мы найдём правильное решение? Для перебора доказательством было бы то, что по каждому проходим.
@frontendscience
@frontendscience 2 жыл бұрын
А тут мы тоже проходим по «всем большим» так как мы пытаемся максимизировать высоту линии или левой или правой и потом для найденной самой высокой,с одной из сторон, линии ищем с другой стороны линию повыше, а так как мы начинаем с противоположных сторон, мы всегда ищем с самой большой ширины.
@nilsen1879
@nilsen1879 2 жыл бұрын
@@frontendscience Вроде бы понял, спасибо за ответ.
@deem5471
@deem5471 2 жыл бұрын
Кстати мне тоже это неочевидно, поэтому видео бы назвал недостаточным для решения) круто было бы наглядно показать
@frontendscience
@frontendscience 2 жыл бұрын
А как еще более наглядно Вы предлагаете это сделать? Если я уже даже анимацию нарисовал, чтоб визуализировать то, о чем рассказываю.
@CJIu3eHb
@CJIu3eHb 2 жыл бұрын
@@deem5471 Тоже сразу не понял по видео. Я бы предложил следующее объяснение. Ширина вначале у нас максимальная, берем конечные палки. Уровень определяется нижней, т.е. для низкой палки уровень не будет больше ни при какой ширине (которая может быть только меньше). Результат высчитывается и на всякий случай запоминается (вдруг это максимальный окажется). Теперь низкую палку можно откинуть, т.к. для этой ширины результат есть, другой такой ширины быть не может, она максимальная (звучит диковато, но тут и так мозги заворачиваются, так что лучше поподробнее). После откинутой палки остается текущий запомненный максимум и урезанный по ширине лес оставшихся палок. И все повторяется заново. Честно говоря, материальное представление и после этого у меня страдает, но хотя бы логически можно разрулить.
@MultiEchelon
@MultiEchelon 2 жыл бұрын
Да уж, далёк я видимо от фронтенда, хотя хотел учится на эту профессию.
@stasbelov4954
@stasbelov4954 2 жыл бұрын
Здравствуйте. Рекурсия 10**5 раз не очень хорошо (подскажите?), но как вариант. function getMaxVolume(arr, maxVolume) { let max = maxVolume || 0 if(arr.length < 2) return max let item = arr.shift() max = Math.max(max, ...arr.map((elem, i)=>{ return Math.min(item, elem) * (i+1) })) return getMaxVolume(arr, max) } Вариант с итерацией (удалил). UPD В очередной раз понимаю, что практически нигде не говорится про алгоритмы решения задач, только вы упоминаете алгоритмы. Программировать научат на любом языке, а решать задачи, по факту, ты можешь слабо, зная только язык. Какой ресурс почитать для ознакомления со всеми алгоритмами?
@frontendscience
@frontendscience 2 жыл бұрын
Благодарю за решение. Не уверен что такой вариант пройдет на литкод, но такого решения еще не присылали ) По поводу алгоритмов: очень рекомендую книгу cracking the coding interview!
@stasbelov4954
@stasbelov4954 2 жыл бұрын
@@frontendscience Да, на ЛитКоде решение не прошло. Как я и предполагал, слишком много памяти при больших вводных данных. Спасибо за совет книги, почитаю.
@maxleichenko5685
@maxleichenko5685 2 жыл бұрын
Серега, ты в фаанг готовишься ?
@frontendscience
@frontendscience 2 жыл бұрын
Ты мне все задачи перерешал на собеседовании! Приходится теперь новые искать 🥷
@tepliyveter8981
@tepliyveter8981 2 жыл бұрын
Подскажите название редактора кода
@frontendscience
@frontendscience 2 жыл бұрын
WebStorm
@user-jh6mw5uc1o
@user-jh6mw5uc1o 2 жыл бұрын
Мой вариант решение задачи. Правда, два цикла "for()". function maxArea(arr) { let max = 0, counter, numberA, numberB for(let i in arr) { counter = 0 for(let j = i; j < arr.length; j++){ const multiply = Math.min(arr[i], arr[j]) * counter if(multiply > max){ max = multiply numberA = arr[i] numberB = arr[j] } counter++ } } console.log(`${arr} Max - ${max}, numberA = ${numberA}, numberB = ${numberB}`) return max } const input = [1,8,6,2,5,4,6,3,7] console.log(`Input1 - ${maxArea(input)}`)
@frontendscience
@frontendscience 2 жыл бұрын
Благодарю за решение )
@Albert-jo
@Albert-jo 2 жыл бұрын
Заполнял заявку, хотел бы пройти собеседование, это возможно?
@frontendscience
@frontendscience 2 жыл бұрын
Алик, если Вы заполнили заявку, она у нас точно есть. Заявок у нас очень много, поэтому существует отбор. Благодарим за доверие!
@frontendscience
@frontendscience 2 жыл бұрын
Альберт, подготовьте, пожалуйста, резюме, и заполните еще раз заявку. У нас есть лив-стрим, где можно посмотреть на подсказки, как лучше оформлять резюме (если нужно).
@user-sl4gd6zo8e
@user-sl4gd6zo8e 2 жыл бұрын
function maxArea(arr, step) { let areas = [] for (let i = 0; i < arr.length - 1; i++) { for (let j = i + 1; j < arr.length; j++) { areas.push(Math.min(arr[i], arr[j]) * step * (j - i)) } } return Math.max(...areas) } Про дополнительные условия не вполне понял.
@frontendscience
@frontendscience 2 жыл бұрын
Благодарю за решение! Это как раз брутфорсный вариант. Дополнительные условия просто рассказывают какого размера может быть массив на leetcode и какие значения там бывают. Например из этого можно понять что делать проверку на пустой массив или то что там будет одно только число - не нужно.
@fotball2796
@fotball2796 2 жыл бұрын
@@frontendscience Досмотрел до конца, не думал, что можно так изящно решить задачу за один проход.
@yarik83men51
@yarik83men51 2 жыл бұрын
Java: public class MaxWater { public static void main(String[] args) { int[] array1 = {1, 8, 6, 2, 5, 4, 8, 3, 7}; // 49 int[] array2 = {1, 1}; // 1 int[] array3 = {4, 3, 2, 1, 4}; // 16 int[] array4 = {1, 2, 1}; // 2 System.out.println(maxArea(array1)); System.out.println(maxArea(array2)); System.out.println(maxArea(array3)); System.out.println(maxArea(array4)); } private static int maxArea(int[] arr){ int max = 0; int left = 0; int right = arr.length - 1; while(left < right) { int currentVolume = Math.min(arr[left], arr[right]) * (right - left); max = Math.max(currentVolume, max); if (arr[left] < arr[right]) { left++; } else { right--; } } return max; } }
@sokoloff114
@sokoloff114 2 жыл бұрын
Спасибо за подробные объяснения, я решил через n^2 и был бы готов поспорить, что такую задачу невозможно решить через n, а вот на тебе! upd. Просмотрел все комментарии, но все решения с двумя простыми циклами немного косячные (т.е. можно подкопаться к использованию let вместо const или избыточному переприсваиванию), поэтому выкладываю свой вариант: function maxArea(heights) { let maxArea = 0; for (let i = 0; i < heights.length; i++) { for (let j = 0; j < heights.length; j++) { const area = Math.min(heights[i], heights[j]) * Math.abs(i - j); if (area > maxArea) maxArea = area; } } return maxArea; }
@frontendscience
@frontendscience 2 жыл бұрын
Отличный вариант с циклами! Благодарю за решение
@evgeniichikishev2096
@evgeniichikishev2096 Жыл бұрын
function findMaxS(arr) { let squares = []; let count = 0; let last = arr[arr.length-1]; for (let i=arr.length-1; i>0; i--) { if (arr[i] < last) continue; if (arr[count] < last) count++; last = arr[i]; squares.push((Math.min(arr[count], last))*(i-count)); } return Math.max(...squares) }
@vlad_issslove
@vlad_issslove 2 жыл бұрын
В данном видео скорее находиться площадь, а не объем. Объем - трехмерное пространосво (м3).
@frontendscience
@frontendscience 2 жыл бұрын
Да, м^3. Именно, что при постоянной глубине контейнера в 1 м переумножать на единицу все расчеты не имеет смысла. А вода измеряется объемом, но никак не площадью.
@serjsamoilow8711
@serjsamoilow8711 2 жыл бұрын
самый большой контейнер с водой это курсы Владилена Минина
@chcylabrab
@chcylabrab 2 жыл бұрын
бесплатные уроки на ютуб имеете ввиду или вы покупали и проходили платные курсы?
@serjsamoilow8711
@serjsamoilow8711 2 жыл бұрын
@@chcylabrab я скачивал его платнык курсы и как по мне - водянистая вода.
@Tom-vr5yv
@Tom-vr5yv 2 жыл бұрын
Обьясняете хорошо но фоновая музыка местами слишком громкая
@frontendscience
@frontendscience 2 жыл бұрын
В этом видео забыли проверить громкость без наушников. Учли
@user-ym3th3pj4h
@user-ym3th3pj4h 2 жыл бұрын
Если двигать только один указатель, результат не изменится. Так зачем нужен этот второй указатель?
@user-ym3th3pj4h
@user-ym3th3pj4h 2 жыл бұрын
Зря написал, надо было сначала подумать)
@Jan_cl0d
@Jan_cl0d Жыл бұрын
function maxArea(heigth) { let value = 0; let left = 0; let right = heigth.length - 1; while(left < right){ if((right - left) * Math.min(heigth[left], heigth[right]) > value){ value = (right - left) * Math.min(heigth[left], heigth[right]) } (heigth[left] < heigth[right]) ? ++left : --right } return value }
@andreytarasenko1914
@andreytarasenko1914 2 жыл бұрын
Мой 4-й сабмит, до этого не проходили тесткейсы( let maxArea = function (height) { let leftCurrentHeight = height[0]; let rightCurrentHeight = height[height.length - 1]; let left = 0; let right =height.length - 1; let maxS = 0; while (left rightCurrentHeight) { right -= 1; } } } return maxS; };
@frontendscience
@frontendscience 2 жыл бұрын
благодарю за решение!
@denis_ken
@denis_ken Жыл бұрын
const input1 = [1, 8, 6, 2, 5, 4, 8, 3, 7]; // 49 const input2 = [1, 1]; // 1 const input3 = [4, 3, 2, 1, 4]; // 16 const input4 = [1, 2, 1]; // 2 function maxArea(height) { const max = Math.max(...height); let total = 0; for (let i = 0; i < max; i++) { let leftIdx = 0; let rightIdx = 0; let totalFromLevel = 0; for (let j = 0; j < height.length; j++) { if (height[j] >= i + 1) { leftIdx = j; break; } } for (let j = height.length - 1; j >= 0; j--) { if (height[j] >= i + 1) { rightIdx = j; break; } } totalFromLevel = (rightIdx - leftIdx) * (i + 1); if (totalFromLevel > total) total = totalFromLevel; } return total; } console.log(maxArea(input1)); console.log(maxArea(input2)); console.log(maxArea(input3)); console.log(maxArea(input4));
@Vel1ar1
@Vel1ar1 2 жыл бұрын
Первое что пришло в голову, решил минут за 5. function maxArea(height) { let max = 0; return (function test() { let currentElem = height[0]; height.forEach((item, index) => { let min = Math.min(currentElem, item) if (max < min * index) { max = min * index; } }); height.splice(0, 1) if(height.length > 1) { return test(height) } return max })() }
@frontendscience
@frontendscience 2 жыл бұрын
Благодарю за решение, вышло компактно. PS: к сожалению литкод отдает Time limit exceeded на такие варианты
@Vel1ar1
@Vel1ar1 2 жыл бұрын
@@frontendscience да, согласен, но для собеседования думаю хватит такого решения)
@sokoloff114
@sokoloff114 2 жыл бұрын
@@Vel1ar1 круто, high order function, forEach, IIFE и рекурсия в одном флаконе! Интервьюер точно удивится!
@oleksandr64
@oleksandr64 2 жыл бұрын
function area() { let max = 0; arr.forEach((item, i) => { arr.forEach((item2, i2) => { if (max < Math.min(item, item2) * (i2-i)) { max = Math.min(item, item2) * (i2-i) } }) }) return max }
@Werma2006
@Werma2006 2 жыл бұрын
В смысле больше 20 лет, вам сколько лет????
@frontendscience
@frontendscience 2 жыл бұрын
37 :) я начал зарабатывать фронтендом с 1-го курса университета :)
@user-xz4nq8qy9o
@user-xz4nq8qy9o 2 жыл бұрын
4:00 кажется тут будет ~ О(n^2 / 2). Мы же проверяем значения по диагонали а не вообще по всему массиву
@frontendscience
@frontendscience 2 жыл бұрын
Рекомендую посмотреть видео про то, как рассчитать сложность по BIG O: kzbin.info/www/bejne/fKaXc62Hg7Njh9U
@kirill_muz
@kirill_muz 2 жыл бұрын
const maxArea = (heights) => { let l = 0; let r = heights.length-1; let maxVolume = 0; while(l!=r){ const leftHeight = heights[l]; const rightHeight = heights[r]; let minHeight = 0; const length = r-l; if(leftHeight > rightHeight){ minHeight = rightHeight; r--; } else{ minHeight = leftHeight; l++; } const currentMax = length * minHeight; if(maxVolume < currentMax){ maxVolume = currentMax; } } return maxVolume; };
@frontendscience
@frontendscience 2 жыл бұрын
Благодарю за решение! Классно вышло!
@user-dl3zo8xf7g
@user-dl3zo8xf7g 2 жыл бұрын
скажите, в 34 года во фронтенд разработчика уже поезд ушел или вполне реально? я НЕ гений, самый обычный ум.
@frontendscience
@frontendscience 2 жыл бұрын
Вполне реально. Выходят и позже. Успехов Вам!
@user-dl3zo8xf7g
@user-dl3zo8xf7g 2 жыл бұрын
@@frontendscience ну если серьезно, работаю вообще по электронике но образование высшее техническое. Азы программирования как бы знаю и понимаю, но в 34 года мой уровень как у ребят которые в 19 лет. Кому я буду нужен старый весь когда кругом молодые все?
@frontendscience
@frontendscience 2 жыл бұрын
@@user-dl3zo8xf7g ну с таким подходом Вы окажитесь правым. Но я за все годы моей работы ни разу не видел, что 34 года проблема, чтоб начать. За 3 года можно вырасти до таких высот, если поставить себе цель, открыть себе любые двери! Все зависит только от человека и его мотивации. Ну и умения превратить свой прошлый опыт в плюс и ценность на новом месте и для нового работодателя.
@user-le8ml9dt3q
@user-le8ml9dt3q 2 жыл бұрын
Спасибо огромное за Ваши труды const maxArea = (heights) => { return heights.reduce((accum, firstHeight, indexFirstHeight, heights) => { const maxAreaBetweenFirstElementAndOtherOne = heights.reduce( (accum, secondHeight, indexSecondHeight) => { const differenceIndexes = Math.abs( indexFirstHeight - indexSecondHeight ); const minHeight = firstHeight > secondHeight ? secondHeight : firstHeight; const area = minHeight * differenceIndexes; return accum < area ? area : accum; }, 0 ); return accum < maxAreaBetweenFirstElementAndOtherOne ? maxAreaBetweenFirstElementAndOtherOne : accum; }, 0); };
@frontendscience
@frontendscience 2 жыл бұрын
Благодарю за поддержку! Решение вышло хорошее и на базовых тесткейсах отлично работает. Но вот на очень больших входящих данных на литкоде не проходит так сложность решения вышла квадратичная. Пишет: Time Limit Exceeded
@ded_zamay
@ded_zamay 2 жыл бұрын
кто придумывает такие задачи ?
@frontendscience
@frontendscience 2 жыл бұрын
Доктор, откуда у вас такие картинки (с) 😂
@user-tn4ze8hd4d
@user-tn4ze8hd4d Жыл бұрын
криво косо, но я пытался function maxArea(height){ let water = 0, max = 0, pointer = 0 for(let i = 0; i < height.length - 1; i++){ if(max < height[i]){ max = height[i] pointer = i } water = max > height[i + 1] ? height[i + 1] * (i - poiner + 1) : max * (i - pointer + 1) } return water }
@_imperial_6762
@_imperial_6762 2 жыл бұрын
Для тех кто изучал С++ эта задача примитивная. Там такие задачи решают: как семечки...
Solving the problem from JS interview - The valid sequence of brackets | LeetCode problems
15:46
Front-end Science із Сергієм Пузанковим
Рет қаралды 37 М.
How to find substring palindrome? Task from frontend job interview | LeetCode | JavaScript
14:49
Front-end Science із Сергієм Пузанковим
Рет қаралды 15 М.
Do you have a friend like this? 🤣#shorts
00:12
dednahype
Рет қаралды 43 МЛН
Sprinting with More and More Money
00:29
MrBeast
Рет қаралды 24 МЛН
Маленькая и средняя фанта
00:56
Multi DO Smile Russian
Рет қаралды 5 МЛН
LeetCode task about collecting rainwater | JavaScript interview
24:45
Front-end Science із Сергієм Пузанковим
Рет қаралды 19 М.
How to randomly sort an array? | LeetCode task | JavaScript
10:20
Front-end Science із Сергієм Пузанковим
Рет қаралды 11 М.
Поняття складності алгоритмів
4:36
Ольга Толочко
Рет қаралды 586
Git reset: difference between soft, mixed and hard
8:54
Front-end Science із Сергієм Пузанковим
Рет қаралды 15 М.
Interview task: Mountain Peak | JS
10:42
Front-end Science із Сергієм Пузанковим
Рет қаралды 11 М.
Numeric palindrome | Solve the LeetCode problem in JavaScript
11:17
Front-end Science із Сергієм Пузанковим
Рет қаралды 11 М.
JS interview task about ATM / Version 1
6:54
Front-end Science із Сергієм Пузанковим
Рет қаралды 15 М.
Sudoku problem (Hard) | Solve problems with Leetcode
33:43
Front-end Science із Сергієм Пузанковим
Рет қаралды 20 М.