Тренировки по алгоритмам от Яндекса. Лекция 2: «Линейный поиск»

Поділитися
Вставка
  • Опубліковано 3 чер 2021
  • Расписание тренировок доступно по ссылке: yandex.ru/yaintern/algorithm-...
    Чат в Телеграме для общения и вопросов о тренировках: t.me/joinchat/Ve7wRegrZtI0NjIy

КОМЕНТАРІ • 133

  • @h1gfun4
    @h1gfun4 2 роки тому +77

    У человека талант педагога) очень приятно смотреть и слушать мастера своего дела, ОЧЕНЬ ОЧЕНЬ! Надеюсь в будущем еще увижу его в роли педагога!!! Благодарю за ваш труд

    • @vladimirmaksimov3938
      @vladimirmaksimov3938 Рік тому +7

      Ну не зря наверно студенты ВШЭ по 500 к в год платят

  • @egorkalmykov4003
    @egorkalmykov4003 2 роки тому +1

    Спасибо огромное за информативную и полезную лекцию !!!

  • @esergey12
    @esergey12 2 роки тому +8

    08.07.2021 Прекрасные видео, спасибо лектору. Очень круто обьясняет.

  • @valeriyemelyanov9090
    @valeriyemelyanov9090 Рік тому +38

    Задача 1: зачем продолжать поиск, после того как найден ответ (первое вхождение!)?
    Вариант решения без лишних переменной, проверки и итераций
    def findx(seq, x):
    for i in range(len(seq)):
    if seq[i] == x:
    return i
    return -1

    • @user-hv9pk2nu8t
      @user-hv9pk2nu8t Рік тому +5

      тот же вопрос возник

    • @nikprilutskiy7064
      @nikprilutskiy7064 Рік тому +4

      Поддержу. Зачем весь список пробегать, если результат уже найден. Это как минимум не эффективно.

    • @ilikecola378
      @ilikecola378 Рік тому +5

      как зачем, чтобы рассказать как эффективно использовать -1.😜

    • @namesurname4406
      @namesurname4406 11 місяців тому

      Может чтобы решение обеих задач было как-то консистентно. Но там не обработано условие с положительными числами.

    • @kosbarable
      @kosbarable 7 місяців тому

      походу ошибка в условии, нужно не крайнее левое вхождение, а крайнее правое, потому что тот код, что приводит ведущий не выводит крайнее левое, а находит и выводит крайнее правое.

  • @iworeushankaonce
    @iworeushankaonce 2 роки тому +19

    круто, курс который я всегда мечтал пройти. было бы здорово если бы Вы объедили эти видео в один плейлист.

    • @devchernov3521
      @devchernov3521 2 роки тому +6

      Курс объединён в плейлист ua-cam.com/play/PL6Wui14DvQPySdPv5NUqV3i8sDbHkCKC5.html

  • @esergey12
    @esergey12 2 роки тому +59

    0:32 О чем лекция. План.
    1:00 Классические задачи линейного поиска.
    1:04 Что такое Линейный поиск.
    1:43 Задача 1. Найти первое вхождение.
    5:48 Задача 2. Найти последнее вхождение.
    7:51 Задача 3. Найти максимальное число.
    12:50 Задача 3. Пояснение сложности сравнения. Лексикографический порядок.
    15:44 Задача 3. Зачем сохранять индексы. Сложность копирования.
    18:48 Задача 4. Два максимума.
    26:17 Задача 5. Минимальное четное.
    30:44 Двухпроходные алгоритмы.
    30:48 Задача 6. Вывести самые короткие слова
    35:28 Задача 7. Сколько блоков воды.
    44:00 Задача с собеседования. RLE
    51:22 Ответы на вопросы.

  • @MsNameness
    @MsNameness 2 роки тому +35

    В задаче 4. Обязательно писать range(2, len(seq)). Иначе в последовательности [5,9,7,8,1,7,4,1,7] вернет (9, 9) вместо (9, 8) потому что алгоритм с самого начала проходит последовательность, и elif seq[i] > max2 встречает 9ку, макс2 записывает 9ку вместо 5ки.

    • @Zaqer84
      @Zaqer84 Рік тому +2

      Вы не совсем правы. В этом алгоритме гораздо больше ошибок, чем вы указали. И ваша правка не спасет ситуацию. [5,9,7, 9,1,7,4,1,7] при ваших правках тоже вернет (9, 9). А еще [9,9,7,4,1,7,4,1,7] тоже вернет (9,9). В программе не верна и логика выбора начальных значений и алгоритм замены. Вот так будет работать:
      def foo(lst):
      if len(lst) < 2:
      return 'error'
      max1 = max2 = min(lst)
      for i in lst:
      if i > max2:
      if i > max1:
      max2, max1 = max1, i
      elif i < max1:
      max2 = i
      return max1, max2

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

      ответ (9, 9) правильный, поскольку нам нужно найти не второе по величине число, а максимум из последовательности если из неё вычеркнуть первый максимум

    • @mberdyshev
      @mberdyshev Рік тому +1

      @@Zaqer84 Согласен с предыдущим оратором. При обсуждении задачи (19:38) чётко обсуждался этот момент.

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

      Да, он это упоминает во время вопросов (1:03:56)

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

      Вот такая же программа на Паскале
      program max;
      uses crt;
      label l;
      var
      arr: array of integer;
      i, len, max1, max2: integer;
      begin
      l:
      writeln('Input the array length: ');
      readln(len);
      if len < 2 then goto l;
      setlength(arr, len);
      writeln('Input the array: ');
      for i := 1 to len do read(arr[i]);
      if arr[0] > arr[1] then
      begin
      max1 := 0;
      max2 := 1;
      end
      else
      begin
      max1 := 1;
      max2 := 0;
      end;
      for i := 0 to length(arr) do
      begin
      if arr[i] > arr[max1] then
      begin
      max2 := max1;
      max1 := i;
      end;
      if (arr[i] = arr[max1]) and (i max1) then max2 := max1;
      if (arr[i] < arr[max1]) and (arr[i] > arr[max2]) then max2 := i;
      end;
      writeln('Max 1 is: ', arr[max1], ' Max 2 is: ', arr[max2]);
      readkey;
      end.

  • @Irades
    @Irades 8 місяців тому

    Спасибо ❤

  • @user-ud9tt5hh1p
    @user-ud9tt5hh1p 11 місяців тому

    Крутое объяснение! Спасибо! Но информации очень много, не каждый воспримет

  • @lippogoo
    @lippogoo 2 роки тому +4

    findmax2 - если в нее передать следующую последовательность {-2,-4,-6} и начать проход по всей последовательности, то что мы получаем, в первый if не заходим, а во втором max2 становится равным -2 и функция вернет {-2, -2}

  • @user-hv9rc7bm2f
    @user-hv9rc7bm2f 2 роки тому +17

    Задача №6
    Написано :
    if len(word)

    • @user-hv9rc7bm2f
      @user-hv9rc7bm2f 2 роки тому +13

      Возьмите работать в Яндекс

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

      @@user-hv9rc7bm2f ахахаа красава

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

      @@user-hv9rc7bm2fпреподавать в ВШЭ*

  • @EgorPifagor
    @EgorPifagor 2 роки тому +5

    У вас в задаче на вывод слов с минимальной длиной опечатка: вы присваиваете счётчику минимальной длины размер заданного массива, а не длину слова

  • @i17talk8
    @i17talk8 2 роки тому +20

    55:34 Категорически не согласен с тем, что continue и break затрудняют понимание. continue уменьшает вложенность, что как раз значительно облегчает понимание и немного ускоряет выполнение, а break значительно ускоряет и также облегчает понимание. Хотя, это у кого как. Разумеется, необходимо во второй задаче идти справа налево и делать break, либо заранее разворачивать список. Нелюбовь к этим конструкциям будет заставлять делать процессор тупую работу, когда можно было бы её не делать. Например, как в ещё одной приведённой задаче, искать минимальную длину слова до конца массива, когда она уже == 1. И функция для осмысливания не на экран должна помещаться, а в голову. Успехов.

    • @valeriyemelyanov9090
      @valeriyemelyanov9090 Рік тому +1

      насчет continue и break поддерживаю на все 100

  • @user-th4qi8iv3q
    @user-th4qi8iv3q 9 місяців тому

    Спасибо

  • @pas777777
    @pas777777 2 роки тому +7

    В python минус бесконечность можно задать как -float('inf')

  • @iptashR
    @iptashR Рік тому +1

    В задаче на собеседование можно счётчик добавить, и если встретили новый символ,добавить цифру в выходную строку, а счётчик обнулить?

  • @deadproxcee4322
    @deadproxcee4322 8 місяців тому

    Знаю, что пишу уже поздно, но может кто нибудь ответит. Хорошо ли решать эту задачу с собеседования используя словарь, в котором ключ это индекс строки, а значение сколько раз она встретилась. А в конце собрать строку обращаясь к исходной через индекс из словаря и количество из значения? Я предполагаю, что по памяти возможно будет хуже, чем предложенное решение, но всё же.
    def update_str(string: str) -> str:
    def pack(s, count):
    if count > 1:
    s += str(count)
    return s
    if string == '':
    return string
    current_index = 0
    count_chars = {0: 1}
    for i in range(1, len(string)):
    if string[i] != string[current_index]:
    count_chars[i] = 1
    current_index = i
    elif string[i] == string[current_index]:
    count_chars[current_index] = count_chars[current_index] + 1
    return ''.join([pack(string[key], value) for key, value in count_chars.items()])

  • @sashavpope
    @sashavpope 2 роки тому +18

    Идеально на 1.5х смотреть. Как и все остальные.

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

      2x норм. Жаль, нет 3x

    • @deniskhakimov
      @deniskhakimov 2 роки тому +1

      @@i17talk8 давненько добавил себе ссылочку в браузере для 3x :D
      URL должен быть чем-то вроде: javascript:document.querySelector('video').playbackRate = 3;
      Это если лень открывать консоль каждый раз.

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

      @@deniskhakimov Спасибо, сработало. В FF только через консоль получилось. Закладка меняет весь body на "3"

    • @user-yg6ne8cc3x
      @user-yg6ne8cc3x 2 роки тому

      @@deniskhakimov в video speed controller - можно более гибко скорость менять, всё-таки у всех разная дикция и скорость речи.

  • @user-dk2mn6fx7y
    @user-dk2mn6fx7y 2 роки тому +23

    А мне кажется, или в 6 задаче в 5 строке решения должно быть len(word) вместо len(words)?

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

      Не кажется

    • @ntvisigoth
      @ntvisigoth 7 місяців тому

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

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

    Привет! Я чего-то не понимаю, но зачем в задаче 1 перебирать массив дальше, если первое вхождение числа было найдено? Ведь можно сразу вернуть искомое и не нужны будут заморочки с -1-кой и дополнительной переменной?
    Понятно что скорость алгоритма останется O(n) для наихудшего случая, и по памяти почти нет выигрыша но..... алгоритм станет проще на мой взгляд....

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

    Небольшая помарка по 6 задаче. В условии сказано, что слова нужно вывести через пробел, если запустим финальное решение на список слов, слова будут просто выведены через пробел. Чтобы исправить это, можно добавить запятую в кавычки join, т.е ' '.join(ans) -> ', '.join(ans)

  • @evgeny8popov
    @evgeny8popov 2 роки тому +19

    Имена переменных вызывают вопросы, конечно. В python snake case принято использовать.

  • @user-sg4kc5cx5v
    @user-sg4kc5cx5v Рік тому +1

    В задаче 8 - обязательно нужно начинать итерацию с 0 элемента, иначе не обработаем ситуацию когда строка в 1 символ, например text = "A"

    • @Khanalas
      @Khanalas Рік тому +4

      Нет, тогда работает append после цикла и ответ всё равно будет 'A'

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

    Задача 3 "Зачем сохранять индексы. Сложность копирования."
    18:17
    Мне кажется, для корректной работы строку
    if seq[i] > seq[ans]:
    нужно заменить на
    if seq[i] > seq[0]:

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

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

  • @kotiko_oks
    @kotiko_oks 8 місяців тому

    5 задача не решается при всех чётных отрицательных числах, исправить можно убрав из условия вторую часть после and и записать ещё один вложенный
    if ans == -1 :
    ans=seq[i]
    elif ans

  • @relax_FM_1
    @relax_FM_1 9 місяців тому +1

    задача 7 требует дополнительного описания, так как не рассмотрен случай, когда "график" имеет несколько максимумов (несколько паттернов подъема и спуска "ступенек")

    • @einesAbends
      @einesAbends 2 місяці тому

      В задаче ищется первый максимум. Все другие максимумы будут справа. Последний максимум в ходе цикла станет nowm.
      Про числовое значение h[maxpos] по факту можно забыть после первого цикла - теперь это чисто элемент-ограничитель для воды, гарантирующий, что она не перельется.
      Попробуйте запустить код в песочнице с тестовыми примерами, он верный.

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

    Добрый день. А если в задаче с островом несколько одинаково больших вершин? Тогда как?

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

    в задаче с двумя проходами первый вариант добавинт пробел в конце строки, поэтому решение не прошло бы тест

  • @user-pg8ry1tm3t
    @user-pg8ry1tm3t Рік тому +1

    Задача 7. Имеем последовательность с локальными минимумами. Оцениваем каждый элемент как минимальную разницу между соседями

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

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

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

    Задача про RLE решена неверно: в исходной формулировке просят генерировать ошибку, если приходит невалидная строка, а в реализации проверки, что s[i] >='A' && s[i]

    • @denchik5188
      @denchik5188 2 роки тому +1

      Попробуй использовать vector (динамический массив, к нему нужно дополнительно подключать библиотеку #include , чтобы узнать как с ним работать рекомендую погуглить). Но, если я ничего не путаю, строка в плюсах работает не так как в питоне. В плюсах это динамический массив чаров и в большинстве случаев добавление происходит за константу, а log н раз копирование. Если интересно что у это структуры ,,под капотом,, рекомендую почитать про Array List. Удачи в изучении)

  • @polrk
    @polrk 2 роки тому +1

    Задачу номер 6 можно решить за один проход. Просто добавлять все слова в мапу => 1: ['a', 'b'], 2: ['ab', 'ba'], ... , после вернуть минимальный ключ

    • @user-xf5ry2ig3h
      @user-xf5ry2ig3h 2 роки тому +1

      чтобы вернуть минимальный ключ, надо пройтись циклом по ключам или я не прав?

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

      @@user-xf5ry2ig3h В переменной

    • @eugenesemin4082
      @eugenesemin4082 Рік тому +1

      @Мария Кузнецова
      Если именно для Python, то можно за один цикл:
      dct = {}
      for word in words:
      dct.setdefault(len(word), []).append(word)

    • @justyar5781
      @justyar5781 Рік тому +3

      Все еще проще:
      seq = ['aa', 'b', 'cc', 'd']
      def shortwords(words):
      minlen = len(words[0])
      ans = []
      for word in words:
      if len(word) < minlen:
      minlen = len(word)
      ans = []
      ans.append(word)
      elif len(word) == minlen:
      ans.append(word)
      return " ".join(ans)
      print(shortwords(seq)) # b d - Решение через 1 прохода

    • @user-cb6kk7xp2y
      @user-cb6kk7xp2y 10 місяців тому

      @@justyar5781 Проблема в сложности алгоритма) В вашем решении много раз происходит операция добавления в массив (тк будут записываться слова разной длины) и операции удаления массива. А сложность при 1 проходе массива или 2 проходах примерно одинаковая = O(n). Так что решение с 2 проходами будет быстрее (тк нет удаления и меньше добавления в массив)

  • @user-bi4wd8hr2r
    @user-bi4wd8hr2r Рік тому

    50:10 15FullHD или 24-4k ? :)

  • @user-qz3tm9cf8i
    @user-qz3tm9cf8i 3 місяці тому

    Михаил очень приятно смотреть твои видео!!! Я про задачу на собеседование сделл в один проход все С++
    std::string st = "AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB";
    if (!st.empty()) {
    char last = st[0];
    int count = 0;
    for (auto i : st) {
    if (i == last) {
    count += 1;
    }
    else {
    std::cout 1)std::cout

  • @EaSy64region
    @EaSy64region 2 роки тому +11

    Что это за чудо-лампа?

  • @user-sf9ow6ir3o
    @user-sf9ow6ir3o 8 місяців тому +1

    задача 7 - это литкод 42, если кому-то нужно

  • @jimmycaldwell2012
    @jimmycaldwell2012 2 роки тому +7

    Зачем в первой задаче проходить полностью по всей последовательности чисел, если можно вернуть найденную позицию сразу как только она будет найдена?

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

      Он в конце видео ответил

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

      @@FeelUs нет, не ответил

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

      @@jimmycaldwell2012 52:16

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

      @@FeelUs спасибо

  • @24Mrnobody
    @24Mrnobody Рік тому +7

    7 задача это просто эталон задач с отбора на всякие компании, нифига с условия непонятно, входных данных нет, как реализовать тоже, сиди 5 часов и думай, что от тебя автор хотел.

    • @user-gu5pz8xf3u
      @user-gu5pz8xf3u Рік тому +1

      я потратил кучу времени, чтобы понять, что в качестве аргумента приходит ландшафт без воды. И что вообще является входным аргументом(думал что двумерный массив)

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

      @@user-gu5pz8xf3u та же ситуация, хотел решить задачу до разбора, поставил видео на паузу и пошел решать. Из контекста думал что ландшафт представлен двумерным массивом и решал задачу соответственно. Потом начал смотреть разбор и понял, что приходит массив из высот столбцов, и все гораздо проще)

  • @v_borovik
    @v_borovik Рік тому +3

    В Java первую задачу начинаем итерацию с начала массива и сразу, как только нашли элемент с нужным значением, возвращаем его индекс и из цикла выходим. Чтобы найти последнее вхождение, надо итерацию начать с конца массива и также вернуть индекс первого встречного элемента с нужным значением, выйти из цикла. Зачем целиком массив перебирать? Лишняя работа. Если переберём весь массив, а элемента с нужным значением не найдём, тогда вернём -1.
    Я не знаю, конечно, как там в Python с этим дела обстоят, но мне кажется, тоже должны быть такие возможности. Или нет?
    Если я на позицию Java-разработчика начну минус один городить, меня спросят: "А нафига ты такой фигнёй занимаешься? Это все избыточно". И джуном то даже не возьмут. Скажут, что нифига не понимаю.))

    • @namesurname4406
      @namesurname4406 11 місяців тому

      Можно было также как вы говорите решить и в питоне, и было бы чуть быстрее. Но что в питоне круто, если с джавой сравнивать - можно было вообще это решение в одну строку уместить.

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

    rle на js, мое решение:
    function rle(str) {
    let ans = '';
    let curLetter = str[0];
    let count = 1;
    for(let i = 1; i < (str+'_').length; i++) {
    if (str[i] === curLetter) {
    count++;
    } else {
    ans += curLetter+(count > 1 ? count : '');
    count = 1;
    curLetter = str[i];
    }
    }
    return ans;
    }

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

      офигенно!

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

      1) >>>> ans += curLetter+(count > 1 ? count : '');
      Привет, O(n^2) по памяти
      2) в condition-части цикла вместо _i < (str+'_').length;_ лучше написать _i

  • @Nievni
    @Nievni Рік тому +1

    В задаче 8 забыли, что строка может быть пустая

  • @user-sj7nr9zd6z
    @user-sj7nr9zd6z 2 роки тому +47

    Первая задача: А что, брейкнуть нельзя цикл без проверки на -1?

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

      Можешь выйти из цикла, а можешь продолжить. Сложность так и останется O(n)

    • @i17talk8
      @i17talk8 2 роки тому +1

      Вот именно. Нафига каждый раз проверять на -1? Кошмарно, если так в яндексе учат и пишут. Академики. Есть ли смысл дальше смотреть? Не научусь ли я у них субоптимальности (тупизне) кода?

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

      @@i17talk8 Не учить вовсе очень плохо

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

      @@rusfungame не учить надо, а понять. Есть же нормальные книги (мануалы, видео), так зачем учиться по плохим? Никто не говорит, что если ты не пользуешься корявыми источниками, то ты не учишься вовсе.

    • @user-ts7ok1tx7w
      @user-ts7ok1tx7w 2 роки тому

      @@i17talk8 если нашёл скинь пожалуйста

  • @unpub2
    @unpub2 Рік тому +2

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

  • @vladimircreator
    @vladimircreator 8 місяців тому

    55:50 - тут я выпал с окна 10 этажа

  • @FeelUs
    @FeelUs 2 роки тому +5

    В решении задачи 6 ошибка (в одной букве)

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

      minlen = len(word) должно быть

    • @user-tq7xp6ev1y
      @user-tq7xp6ev1y 2 роки тому +3

      "Решение работать будет, но будет работать медленно" - не будет, слона то и не заметили :)

  • @user-pg8ry1tm3t
    @user-pg8ry1tm3t Рік тому

    Задача с собеса. Куча вопросов. Что с памятью, что со временем. Надо ли запоминать получившуюся строку или просто вывести в консоль?..

  • @user-bi4wd8hr2r
    @user-bi4wd8hr2r Рік тому

    1:08:50 Разрешено более одного максимума. Для этого алгоритма мы получим такой результат.
    O O
    OWOWO
    OWOWO
    OOOO0O

  • @alexpizza72
    @alexpizza72 11 місяців тому

    5:40, а почему не сделать принудительный выход из цикла, если левое значение найдено? зачем дальнейший перебор?

  • @user-sf9ow6ir3o
    @user-sf9ow6ir3o Рік тому

    почему в первой просто не брейкнуть как только нашли нужное число?

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

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

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

    00:20:58

  • @tertiumorganum5665
    @tertiumorganum5665 9 місяців тому

    ну чел, если есть проблемы с break и continue, даж хз что сказать. кмк это близко к топ 5 вредных советов. цикл мог выйти на 1 итерации, но ок, изза трудностей восприятия мы конечно будем крутиться все 10000 раз 😂

  • @user-sf9ow6ir3o
    @user-sf9ow6ir3o Рік тому

    очень тихо(

  • @user-ud2yb8ou7s
    @user-ud2yb8ou7s 2 роки тому +4

    Отлично! на выходные задачек будет) Чувствую буду после курса таким же крутым! ua-cam.com/video/g5OCi20yIyc/v-deo.html

    • @Sancho_Merka
      @Sancho_Merka 2 роки тому +1

      Из-за Вашего комментария начал смотреть этот сериал :)

    • @user-ud2yb8ou7s
      @user-ud2yb8ou7s 2 роки тому

      @@Sancho_Merka Отлично) тебе понравится! в переводе кубик в кубе обязательно

    • @user-ud2yb8ou7s
      @user-ud2yb8ou7s 2 роки тому

      @@Sancho_Merka только наши ролики не смотри. лучше сначала сам сериал)

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

    где домашка то?

  • @alekseypavlov2539
    @alekseypavlov2539 2 місяці тому

    //Задача 4 - Java script
    const arr = [ 5, 9, 7, 9, 1, 7, 4, 1, 7 ]
    let numbers = [ 0, 0 ]
    for (let i = 0; i < arr.length; i++) {
    if (numbers[1] < arr[i]) {
    numbers[1] = arr[i]
    }
    if (numbers[0] < arr[i] && arr[i] < numbers[1]) {
    numbers[0] = arr[i]
    }
    }
    console.log(numbers)

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

    Зачем так усложнять 4 задачу? Это ведь та же первая, только предыдущее значение перед ответом мы должны запомнить, и еще дополнение: если два одинаковых числа встречаются, то нужно обработать оба, поэтому в ифе больше либо равно вместо строгого равенства
    def find2max(seq):
    ans1 = seq[0]
    for i in range(len(seq)):
    if seq[i] >= ans1:
    ans2 = ans1
    ans1 = seq[i]
    return ans1, ans2

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

      Ваше решение сломается на тестах [5, 4, 3, 2] или [5, 5, 7, 6]

    • @LastFreeEagle
      @LastFreeEagle Рік тому +1

      @@mberdyshev Спасибо, видимо, все-таки без мин макс или сортировки не обойтись)

  • @MrLuckfinder
    @MrLuckfinder 6 місяців тому +1

    Мда, разжёвываем, разжёвываем простое...
    Потом сложное - "ну здесь всё понятно, пропускаем" 🤦🤦

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

    4 задача решена не верно. Не верно выбираются начальные значения и не верно заменяются значения при переборе.
    Верный вариант если можно использовать min и max:
    def foo(lst):
    if len(lst) < 2:
    return 'error'
    max1 = max(lst)
    max2 = min(lst)
    for i in lst:
    if max1 > i > max2:
    max2 = i
    return max1, max2
    Верный вариант если можно использовать сортировку:
    def foo(lst):
    if len(lst) < 2:
    return 'error'
    max1, *max2 = sorted(set(lst))[:-3:-1]
    return max1, max2[0] if max2 else max1

  • @RisDeep
    @RisDeep 2 роки тому +5

    Слишком длинные видео.
    Поэтому люди будут перелистывать.
    И 90% времени на экране текст задачи или решение какой-то задачи. Контекст совершенно непонятен.
    Добавляйте заголовки что за тема задачи и зачем её разбирать. У вас всё равно во многих сценах 50% свободного места на экране

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

    перед решением одной задачи, решил свое решение писать и сравнивать с тем что получилось. Это задача в 2 прохода, где нужно найти короткие слова. C 1 циклом получилось и как оказалось быстрее
    import timeit
    import copy
    some_words = 'adasawsd aa asdadsadb csdcc dasaads dd'.split(' ')
    def short_words_1(words):
    words = copy.deepcopy(words)
    count = len(words[0])
    ans = []
    for w in words:
    if len(w) > count:
    continue
    if len(w) < count:
    ans.clear()
    count = len(w)
    ans.append(w)
    return ' '.join(ans)
    def short_words_2(words):
    words = copy.deepcopy(words)
    min_len = len(words[0])
    for word in words:
    if len(word) < min_len:
    min_len = len(word)
    ans = []
    for word in words:
    if len(word) == min_len:
    ans.append(word)
    return ' '.join(ans)
    ans_1 = short_words_1(some_words)
    ans_1_time = timeit.timeit(lambda: short_words_1(some_words), number=10000000)
    ans_2 = short_words_2(some_words)
    ans_2_time = timeit.timeit(lambda: short_words_2(some_words), number=10000000)
    print(f'{ans_1}: {ans_1_time}') # aa dd: 29.5462521
    print(f'{ans_2}: {ans_2_time}') # aa dd: 29.923632399999995

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

    Вот вам один проход, не тупите. скинет все слова с минимальной длиной за один проход.
    function linearSearch(strings) {
    let minLen = strings[0].length;
    let arr = [];
    for (const word of strings) {
    if (word.length < minLen) {
    minLen = word.length;
    arr = [word];
    } else if (word.length === minLen) {
    arr.push(word);
    }
    }
    return arr.join(' ');
    }

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

    Спасибо

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

    В задаче на собеседование можно счётчик добавить, и если встретили новый символ,добавить цифру в выходную строку, а счётчик обнулить?

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

    В задаче на собеседование можно счётчик добавить, и если встретили новый символ,добавить цифру в выходную строку, а счётчик обнулить?