Решаем задачу calculator на leetcode | JavaScript | Computer Science

Поділитися
Вставка
  • Опубліковано 31 тра 2024
  • В видео пройдёмся и решим за O(N) задачу с одного собеседования, Calculator.
    🍀 Поддержать развитие канала: www.donationalerts.com/r/webe...
    ✍️ Мой телеграм канал: t.me/webelart
    🏰 Английский UA-cam: @webelart_en
    💁🏼‍♀️ Мой инстаграм: / webelart
    🦄 LinkedIn: / webelart
    Ссылки используемые в уроке:
    📹 Оценка сложности алгоритмов: • Оценка сложности алгор...
    📹 Учимся использовать стек и очередь в JavaScript: • Учимся использовать ст...
    🔗 LeetCode задача - leetcode.com/problems/basic-c...
    00:00 Введение.
    01:02 Разбираем условие задачи.
    06:20 Изучаем алгоритм.
    10:50 Пишем код.
    18:58 Тестирование.
    На канале я рассматриваю различные темы веб-разработки, на текущий момент: веб-основы, веб-анимации, веб-дизайн.

КОМЕНТАРІ • 40

  • @ourdestruction6851
    @ourdestruction6851 3 місяці тому +2

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

  • @reina_5425
    @reina_5425 Місяць тому

    Елена, спасибо за разбор задачи 🤩 побольше бы таких видео, вы очень хорошо объясняете 👍

  • @Phoenix_coding
    @Phoenix_coding 4 місяці тому +3

    мне нравится твоя подача 👍🥰

  • @marpusik1277
    @marpusik1277 4 місяці тому +2

    Гитара у стены - моё почтение😇

  • @user-ji6vi7hp2z
    @user-ji6vi7hp2z 4 місяці тому +1

    Очень интересно!

  • @avp6537
    @avp6537 3 місяці тому

    Елена, спасибо за полезное видео!
    Ещё сегодня пришла ваша открытка🎉 Было неожиданно открыть и увидеть там Салазара Слизерина😮😂 Спасибо!!!

    • @webelart
      @webelart  3 місяці тому +1

      Рада, что видео понравилось. Про открытку, крутота! Карточки Гарри Поттера я положила наверно в 2-3 открытки. :)

  • @delosait
    @delosait 4 місяці тому

    А мне пришла открыткаааа🎉🎉😂 Ура, ура, ура, Спасибо, Лена🎉🎉🎉

    • @webelart
      @webelart  4 місяці тому

      О, крутяк! ☺

  • @vladimirbelonogov5993
    @vladimirbelonogov5993 4 місяці тому +2

    Можно ли как-то получить доступ к вашему курсу по алгоритмам, хотел купить? Очень нравится ваша подача

    • @webelart
      @webelart  4 місяці тому +1

      Здравствуйте, Владимир. Пока нет набора на алгоритмы. Если будет, я отпишусь под комментарием. ❤

  • @NeverGTI
    @NeverGTI 4 місяці тому

    Это вы заюзали обратную польскую запись, так что ли получается? Если да, то странно как то идею сформулировали, ну или я не очень суть ухватил )

    • @webelart
      @webelart  4 місяці тому +1

      Нет это не обратная польская нотация. Это обычный калькулятор. Польская нотация попроще. Кстати в видео про стек и очередь как раз её решала.

    • @NeverGTI
      @NeverGTI 4 місяці тому

      @@webelart значит пересмотрю видео более внимательно. В любом случае, спасибо за видосики )

  • @qulinxao
    @qulinxao 4 місяці тому

    замечание по терминам - цифра это глиф для десятичного это от 0 до 9 - число(целое во входе ещю и натуральное ) это от 1 и более цифр

    • @webelart
      @webelart  4 місяці тому

      Это вы цифре замечание сделали? Вот она на вас теперь обидется и разговаривать не будет. И кляксы в тетрадках ставить будет. Даже и не позавидуешь вам теперь. 🦊

    • @qulinxao
      @qulinxao 4 місяці тому

      @@webelart сам страдаю

  • @sayces
    @sayces 3 місяці тому

    :like:

  • @qulinxao
    @qulinxao 4 місяці тому

    class Solution:
    def calculate(self, s: str) -> int:
    s,m,b,z=s.replace(' ','')+'+',[],0,set('*/')
    for e in s:
    if e not in '*/-+':b=b*10+int(e);continue
    len(m) and m[-1] in z and (b:=m.pop()*b if m.pop()=='*' else m.pop()//b)
    m.append(b);m.append(e);b=0
    return m[0]+sum((-1 if m[p-1]=='-' else 1)*m[p]for p in range(2,len(m),2))

    • @webelart
      @webelart  4 місяці тому

      Чё-то сложно написано. Мне алгоритм в видео больше нравится.

    • @qulinxao
      @qulinxao 4 місяці тому

      @@webelart у вас по факту стандартный парсер скобочного выражение с выкинутыми скобками - и следовательно стеком их вложенностей - исключить отдельную отработку последнего аргумента (который не завершён в отличии от остальных последующим оператором обычно можно обьемлющими скобками :)
      спасибо за радость глазу

    • @webelart
      @webelart  4 місяці тому +1

      @@qulinxao Надо будет со скобками решить. Пока не знаю как.

  • @SerzhNesteruk
    @SerzhNesteruk 4 місяці тому

    Спасибо за видео и интересную задачу!
    Не спешил подсматривать ваше решение, и попробовал решить самостоятельно. Не сразу получилось красиво декомпозировать задачу. Сперва была мысль парсить токены (числа, операторы) в многоуровневый массив (хорошо, что от этой идеи отказался), чтобы уже потом учесть приоритеты операторов. После же некоторых раздумий пришёл таки к практически идентичному решению. Вот, что вышло:
    const calculate = function(str) {
    const subtotal = [];
    let numeric = '';
    let sign = '+';
    for (const char of str + '=') {
    if (char === ' ') {
    continue;
    }
    if (!isNaN(char)) {
    numeric += char;
    continue;
    }
    if (sign === '+') {
    subtotal.push(+numeric);
    }
    if (sign === '-') {
    subtotal.push(-numeric);
    }
    if (sign === '*') {
    subtotal.push(subtotal.pop() * numeric);
    }
    if (sign === '/') {
    subtotal.push(subtotal.pop() / numeric | 0);
    }
    numeric = '';
    sign = char;
    }
    return subtotal.reduce((a, b) => a + b, 0);
    };
    Правда, для удобочитаемости я выбрал цикл for...of и отказался от switch...case. Но ваше решение будет всё же более производительным, та и нейминг переменных в нём мне таки понравился больше. 👍

    • @webelart
      @webelart  4 місяці тому +1

      У меня такое же решение. ❤

  • @vatasi7312
    @vatasi7312 4 місяці тому

    Еще кто то заметил чему равно 2+2*2 в превью ?😮😊

    • @webelart
      @webelart  4 місяці тому

      А как вы думаете, что там?

    • @vatasi7312
      @vatasi7312 4 місяці тому

      @@webelart 2 или 3 :D?

    • @webelart
      @webelart  4 місяці тому

      @@vatasi7312 Мимо! 😄 Ещё предложения?

    • @vatasi7312
      @vatasi7312 4 місяці тому

      2+2*2​@@webelart😂😂😂

    • @webelart
      @webelart  4 місяці тому

      @@vatasi7312 Нет :)

  • @MultiEchelon
    @MultiEchelon 4 місяці тому

    Я видимо никогда не буду так разбираться в таком коде...😢 слишком нужно шарить в математике

    • @webelart
      @webelart  4 місяці тому +2

      Из математики здесь только + - * /. Остальное алгоритм. Подписывайтесь на канал и я вас научу! ❤

  • @virtuoz-ru
    @virtuoz-ru 4 місяці тому

    Лена, у тебя канал называется "Елена Литвинова - Искусство Веб-разработки", а не какой-то там вебеларт

    • @webelart
      @webelart  4 місяці тому +3

      Вебэларт это и есть искусство веб разработки, сокращено. Веб - это веб, el -это часть моего имени. Art - искусство.