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

Поділитися
Вставка
  • Опубліковано 23 гру 2024

КОМЕНТАРІ • 121

  • @frontendscience
    @frontendscience  3 роки тому +16

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

    • @inzagher
      @inzagher 3 роки тому +3

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

    • @MrNonameous
      @MrNonameous 3 роки тому

      А где доказательство, что такое решение будет максимальным?

    • @frontendscience
      @frontendscience  3 роки тому +2

      @@MrNonameous В видео. Как бы странно это ни звучало)
      Весь алгоритм построен на принципе максимизации объема. Что я и объяснял в видео.

    • @ДмитрийНормов-ю6ц
      @ДмитрийНормов-ю6ц 3 роки тому

      А если попадутся 2 одинаковые по высоте линии? Как тогда перемещать указатель?)))

    • @ШерзодТурсунов-б1ж
      @ШерзодТурсунов-б1ж 3 роки тому

      @@ДмитрийНормов-ю6ц если две одинаковые по высоте линии тогда без разницы какой указатель двигать. (В видео двигается правый указатель)

  • @raykovskyy
    @raykovskyy 3 роки тому +134

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

    • @Александр-н1ю1п
      @Александр-н1ю1п 3 роки тому +2

      😂 Ай красавчик!!! Лучше и не скажешь.... Вспомнил как свою дипломную писал!!!

    • @valvetigu5207
      @valvetigu5207 3 роки тому +1

      Я не програмер, учился в меде. И должен вас поправить. Гомеопатия - о где главная вода!

  • @oleksandrvoron_ko580
    @oleksandrvoron_ko580 3 роки тому +2

    Як завжди круто і все чітко роз'яснено! Признаюся не рішав але код в кінці ясний, це вже хоч щось, коли розумієш рядки коду))

    • @frontendscience
      @frontendscience  3 роки тому +1

      Да, это действительно хороший показатель. Через пару недель попробуйте вернуться к задаче, пересмотреть условие и попробовать решить по памяти. 👍

  • @multiply87
    @multiply87 3 роки тому +7

    Просто кайфую от твоих алгоритмов)

  • @yurypetukhou3137
    @yurypetukhou3137 Рік тому

    Что бы я без вас дела ) Спасибо огромное

  • @anton-vr5xw
    @anton-vr5xw 3 роки тому +7

    Хорошая задача, и сама подача видео отличная, спасибо огромное 😌

  • @ВладимирГринько-й6с

    Нереально крутой контент🔥🔥🔥👍👍👍 Сергей, огромное спасибо за обзор и решение различных задач🤝 много полезного и интересного узнал из твоих видео👍 не сомневаюсь, что в скором времени будешь в трендах на первых местах😉 такой колоссальный труд обязательно будет оценён 💪

    • @frontendscience
      @frontendscience  3 роки тому

      Ваау! Как приятно! Благодарю за поддержку и вдохновение! 🚀

  • @aleksberg3686
    @aleksberg3686 3 роки тому +1

    Гений!!! Все так просто решается!!! Код простой но с продуманой логикой. Благодарю за видео!!!

    • @frontendscience
      @frontendscience  3 роки тому

      Благодарю Вас за поддержку! Рад, что было полезно)

  • @Neravarinn
    @Neravarinn 3 роки тому +1

    Приветствую. Спасибо за очередную головоломку)) Недавно начал изучать js и впервые смог решить вашу задачку. К сожалению не додумался до самого оптимального способа, поэтому решил через 2 цикла.
    function maxArea(heights){
    let area =0
    let areaMax =0
    if (heights.length>=2 & heights.length

    • @frontendscience
      @frontendscience  3 роки тому +1

      Круто, что нашли решение! На собеседованиях чаще всего с этого начинают - и потом по подсказкам ищут более оптимальное решение! Успехов Вам!

  • @ДмитрийМедыченко
    @ДмитрийМедыченко 3 роки тому +1

    Сергей, с праздником Вас!)
    Спасибо большое за видео, очень интересно и доходчиво. Жду с нетерпением новых🔥👍

    • @frontendscience
      @frontendscience  3 роки тому +1

      Вау! Точно! И Вас с праздником! 🎈🚀🎉
      Спасибо большое за поддержку! Будем стараться))

  • @АрсаланБазаров-л4п

    Огромное спасибо за полезный контент и доступное объяснение!!))

  • @theoddorrrrr
    @theoddorrrrr 3 роки тому +3

    Нереально годный контент, спасибо!

  • @ВладПашковский-ц2э

    Большое вам спасибо

  • @Ivan-ei5cc
    @Ivan-ei5cc 3 роки тому +1

    Похоже рекомендации подсказали хороший канал:)

  • @Sleep88Walker
    @Sleep88Walker 3 роки тому +2

    Хорошая подача, приятная графика

    • @frontendscience
      @frontendscience  3 роки тому

      Благодарю за поддержку! Рад, что понравилось)

  • @Sk1llahh
    @Sk1llahh 3 роки тому +12

    Привет! Все хорошо, нравится твоя подача. Но можно ли музыку потише? Либо твой голос погромче

    • @frontendscience
      @frontendscience  3 роки тому +3

      Забыли проверить без наушников в этот раз, учтем на будущее. Благодарим.

  • @alex_osx
    @alex_osx 3 роки тому

    отличная задачка и классное решение!

  • @maxleichenko5685
    @maxleichenko5685 3 роки тому +3

    Качество видео на высоте!
    Сколько времени у тебя занимает подготовка одного видео?

    • @frontendscience
      @frontendscience  3 роки тому +8

      Благодарю, приятно слышать) Очень по-разному. На это ушло 3 вечера - съемка и монтаж с отрисовкой анимации. Я ж в свободное время это делаю.

  • @MrJohnny23
    @MrJohnny23 3 роки тому

    Подскажите какой ide использует автор на видео?

    • @frontendscience
      @frontendscience  3 роки тому +1

      WebStorm

    • @MrJohnny23
      @MrJohnny23 3 роки тому

      @@frontendscience спасибо, удобные фишки есть, но блин она платная)
      А если из бесплатных, какую бы могли посоветовать? (По опыту)

    • @frontendscience
      @frontendscience  3 роки тому

      Других не использовал, поэтому, к сожалению, не могу подсказать.

  • @sokoloff114
    @sokoloff114 3 роки тому

    Спасибо за подробные объяснения, я решил через 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  3 роки тому +1

      Отличный вариант с циклами! Благодарю за решение

  • @stasbelov4954
    @stasbelov4954 3 роки тому +1

    Здравствуйте.
    Рекурсия 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  3 роки тому +1

      Благодарю за решение. Не уверен что такой вариант пройдет на литкод, но такого решения еще не присылали )
      По поводу алгоритмов: очень рекомендую книгу cracking the coding interview!

    • @stasbelov4954
      @stasbelov4954 3 роки тому

      @@frontendscience
      Да, на ЛитКоде решение не прошло. Как я и предполагал, слишком много памяти при больших вводных данных.
      Спасибо за совет книги, почитаю.

  • @tepliyveter8981
    @tepliyveter8981 3 роки тому

    Подскажите название редактора кода

  • @IsrafilGuseinov
    @IsrafilGuseinov 3 роки тому

    Привет, мог бы дать совет, как прокачать нативку, если прям туго очень? Просто решать задачки с того же литкод? Или может есть ещё какие-нибудь варианты?

    • @frontendscience
      @frontendscience  3 роки тому

      Привет. Под нативкой Вы имеете в виду нативный JS? или же алгоритмы?

    • @IsrafilGuseinov
      @IsrafilGuseinov 3 роки тому

      @@frontendscience именно нативный, да)

    • @frontendscience
      @frontendscience  3 роки тому

      @@IsrafilGuseinov ну тогда возможно какой-то курс по js пройти, чтобы систематизировать все знания и заполнить пробелы. Или например learnjavascript.ru почитать и поделать задачи.

    • @IsrafilGuseinov
      @IsrafilGuseinov 3 роки тому

      @@frontendscience спасибо!!

    • @frontendscience
      @frontendscience  3 роки тому

      @@IsrafilGuseinov успехов!

  • @whiteguards43
    @whiteguards43 5 місяців тому

    идет от 1 до 8, каким образом их там 7 получается??

  • @ArtemkoOnly
    @ArtemkoOnly 3 роки тому

    Что за ide используете?

  • @EvilYou
    @EvilYou 3 роки тому

    Задачу решил, но решение мне самому не нравится, слишком уж громоздкое получилось. Можно сократить за счет функций, но тогда результат вместо "быстрее 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  3 роки тому

      необычно вышло - благодарю за решение!

  • @magbear3205
    @magbear3205 3 роки тому +1

    Больше подобного контента

  • @Богдан-ф8и9т
    @Богдан-ф8и9т 3 роки тому +1

    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  3 роки тому

      Благодарю за решение! Это как раз брутфорсный вариант. Дополнительные условия просто рассказывают какого размера может быть массив на leetcode и какие значения там бывают. Например из этого можно понять что делать проверку на пустой массив или то что там будет одно только число - не нужно.

    • @fotball2796
      @fotball2796 3 роки тому

      @@frontendscience Досмотрел до конца, не думал, что можно так изящно решить задачу за один проход.

  • @Albert-jo
    @Albert-jo 3 роки тому

    Заполнял заявку, хотел бы пройти собеседование, это возможно?

    • @frontendscience
      @frontendscience  3 роки тому

      Алик, если Вы заполнили заявку, она у нас точно есть. Заявок у нас очень много, поэтому существует отбор.
      Благодарим за доверие!

    • @frontendscience
      @frontendscience  3 роки тому

      Альберт, подготовьте, пожалуйста, резюме, и заполните еще раз заявку. У нас есть лив-стрим, где можно посмотреть на подсказки, как лучше оформлять резюме (если нужно).

  • @maxleichenko5685
    @maxleichenko5685 3 роки тому

    Серега, ты в фаанг готовишься ?

    • @frontendscience
      @frontendscience  3 роки тому +1

      Ты мне все задачи перерешал на собеседовании! Приходится теперь новые искать 🥷

  • @maratsultanov6462
    @maratsultanov6462 3 роки тому

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

    • @frontendscience
      @frontendscience  3 роки тому +2

      это задача Medium уровня. Можно посмотреть на задачки easy на leetcode. Или еще можно начать с задачек на codewars - выбрать 8 и 7 q там

    • @chcylabrab
      @chcylabrab 3 роки тому

      @@frontendscience Сергей, подскажите, medium на литкоде каким уровням равен на коудварс(хотя б примерно)? я решал только на коудварс, потому интересно сравнить с литкодом свой уровень😀

  • @SerhiyLevashov
    @SerhiyLevashov 3 роки тому

    Если двигать только один указатель, результат не изменится. Так зачем нужен этот второй указатель?

    • @SerhiyLevashov
      @SerhiyLevashov 3 роки тому

      Зря написал, надо было сначала подумать)

  • @nilsen1879
    @nilsen1879 3 роки тому +1

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

    • @frontendscience
      @frontendscience  3 роки тому +1

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

    • @nilsen1879
      @nilsen1879 3 роки тому

      @@frontendscience Вроде бы понял, спасибо за ответ.

    • @deemdeemdeem
      @deemdeemdeem 3 роки тому

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

    • @frontendscience
      @frontendscience  3 роки тому

      А как еще более наглядно Вы предлагаете это сделать? Если я уже даже анимацию нарисовал, чтоб визуализировать то, о чем рассказываю.

    • @CJIu3eHb
      @CJIu3eHb 3 роки тому +1

      @@deemdeemdeem Тоже сразу не понял по видео. Я бы предложил следующее объяснение. Ширина вначале у нас максимальная, берем конечные палки. Уровень определяется нижней, т.е. для низкой палки уровень не будет больше ни при какой ширине (которая может быть только меньше). Результат высчитывается и на всякий случай запоминается (вдруг это максимальный окажется). Теперь низкую палку можно откинуть, т.к. для этой ширины результат есть, другой такой ширины быть не может, она максимальная (звучит диковато, но тут и так мозги заворачиваются, так что лучше поподробнее). После откинутой палки остается текущий запомненный максимум и урезанный по ширине лес оставшихся палок. И все повторяется заново.
      Честно говоря, материальное представление и после этого у меня страдает, но хотя бы логически можно разрулить.

  • @wisarty
    @wisarty 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)
    }

  • @Werma2006
    @Werma2006 3 роки тому +2

    В смысле больше 20 лет, вам сколько лет????

    • @frontendscience
      @frontendscience  3 роки тому

      37 :) я начал зарабатывать фронтендом с 1-го курса университета :)

  • @yarik83men51
    @yarik83men51 3 роки тому

    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;
    }
    }

  • @Proogro
    @Proogro 3 роки тому

    Мой вариант решение задачи. Правда, два цикла "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)}`)

  • @ЕВГЕНИЙЕЛИСЕЕВ-о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  3 роки тому

      Благодарю за поддержку!
      Решение вышло хорошее и на базовых тесткейсах отлично работает. Но вот на очень больших входящих данных на литкоде не проходит так сложность решения вышла квадратичная. Пишет: Time Limit Exceeded

  • @MultiEchelon
    @MultiEchelon 3 роки тому

    Да уж, далёк я видимо от фронтенда, хотя хотел учится на эту профессию.

  • @vlad_issslove
    @vlad_issslove 3 роки тому

    В данном видео скорее находиться площадь, а не объем. Объем - трехмерное пространосво (м3).

    • @frontendscience
      @frontendscience  3 роки тому

      Да, м^3. Именно, что при постоянной глубине контейнера в 1 м переумножать на единицу все расчеты не имеет смысла. А вода измеряется объемом, но никак не площадью.

  • @mikhailblush5261
    @mikhailblush5261 3 роки тому +1

    о, отец выспался)

  • @ארטםמניאיילו
    @ארטםמניאיילו 3 роки тому

    4:00 кажется тут будет ~ О(n^2 / 2). Мы же проверяем значения по диагонали а не вообще по всему массиву

    • @frontendscience
      @frontendscience  3 роки тому +1

      Рекомендую посмотреть видео про то, как рассчитать сложность по BIG O: ua-cam.com/video/Fu4BzQNN0Qs/v-deo.html

  • @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
    }

  • @Tom-vr5yv
    @Tom-vr5yv 3 роки тому

    Обьясняете хорошо но фоновая музыка местами слишком громкая

    • @frontendscience
      @frontendscience  3 роки тому

      В этом видео забыли проверить громкость без наушников. Учли

  • @serjsamoilow8711
    @serjsamoilow8711 3 роки тому +3

    самый большой контейнер с водой это курсы Владилена Минина

    • @chcylabrab
      @chcylabrab 3 роки тому

      бесплатные уроки на ютуб имеете ввиду или вы покупали и проходили платные курсы?

    • @serjsamoilow8711
      @serjsamoilow8711 3 роки тому +1

      @@chcylabrab я скачивал его платнык курсы и как по мне - водянистая вода.

  • @Vel1ar1
    @Vel1ar1 3 роки тому

    Первое что пришло в голову, решил минут за 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  3 роки тому

      Благодарю за решение, вышло компактно. PS: к сожалению литкод отдает Time limit exceeded на такие варианты

    • @Vel1ar1
      @Vel1ar1 3 роки тому

      @@frontendscience да, согласен, но для собеседования думаю хватит такого решения)

    • @sokoloff114
      @sokoloff114 3 роки тому

      @@Vel1ar1 круто, high order function, forEach, IIFE и рекурсия в одном флаконе! Интервьюер точно удивится!

  • @denis_ken
    @denis_ken 2 роки тому

    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));

  • @andreytarasenko1914
    @andreytarasenko1914 3 роки тому

    Мой 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;
    };

  • @oleksandr64
    @oleksandr64 3 роки тому

    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
    }

  • @АлександрИванов-п4и9ь

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

    • @frontendscience
      @frontendscience  3 роки тому

      Вполне реально. Выходят и позже. Успехов Вам!

    • @АлександрИванов-п4и9ь
      @АлександрИванов-п4и9ь 3 роки тому

      @@frontendscience ну если серьезно, работаю вообще по электронике но образование высшее техническое. Азы программирования как бы знаю и понимаю, но в 34 года мой уровень как у ребят которые в 19 лет. Кому я буду нужен старый весь когда кругом молодые все?

    • @frontendscience
      @frontendscience  3 роки тому

      @@АлександрИванов-п4и9ь ну с таким подходом Вы окажитесь правым. Но я за все годы моей работы ни разу не видел, что 34 года проблема, чтоб начать. За 3 года можно вырасти до таких высот, если поставить себе цель, открыть себе любые двери! Все зависит только от человека и его мотивации. Ну и умения превратить свой прошлый опыт в плюс и ценность на новом месте и для нового работодателя.

  • @kirill_muz
    @kirill_muz 3 роки тому

    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  3 роки тому

      Благодарю за решение! Классно вышло!

  • @ded_zamay
    @ded_zamay 3 роки тому

    кто придумывает такие задачи ?

    • @frontendscience
      @frontendscience  3 роки тому

      Доктор, откуда у вас такие картинки (с) 😂

  • @МихаилАминов-о3з
    @МихаилАминов-о3з 2 роки тому

    криво косо, но я пытался
    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 роки тому

    Для тех кто изучал С++ эта задача примитивная. Там такие задачи решают: как семечки...