Задача с собеседования за 180.000

แชร์
ฝัง
  • เผยแพร่เมื่อ 15 พ.ย. 2024

ความคิดเห็น • 362

  • @lightcode-group
    @lightcode-group  ปีที่แล้ว +1

    📢 ССЫЛКА НА TELEGRAM канал по .NET разработке: t.me/lightcode_group
    ⚡ ПОДДЕРЖКА канала на boosty: boosty.to/lightcode

    • @tuhkanchik
      @tuhkanchik 11 หลายเดือนก่อน

      легкая программа

  • @Ferrotum
    @Ferrotum ปีที่แล้ว +623

    Если это задача на 180к, то задача на 80к - напишите программу выводящую "Hello World"😂😂😂

    • @binancetraider658
      @binancetraider658 ปีที่แล้ว

      А за 40к?

    • @Ferrotum
      @Ferrotum ปีที่แล้ว

      @@binancetraider658 знать как включить компьютер. Что в общем то и указывается в вакансиях ("...уверенный пользователь ПК...")

    • @kemalthes
      @kemalthes ปีที่แล้ว

      ​@@binancetraider658Включите компьютер

    • @boryan07
      @boryan07 ปีที่แล้ว +14

      Это задача на 180к, а не целое собеседование на 180к)

    • @vapoltavecs
      @vapoltavecs ปีที่แล้ว +2

      Мне интересно, как вы оцениваете свой уровень? Я не наезжаю, просто интересуюсь) просто я был на собесах даже больше, чем на 180к и там дают задачи не сильно сложнее этой. Обычно вообще собес на Джуна и Мидла отличается вопросами более глубокого понимания работы стека и в целом технологий, а задачки +- одни и те же

  • @brunneng8575
    @brunneng8575 ปีที่แล้ว +161

    Ну да, всем известно же что на работе за 180к кодеры только и пишут код который буквы подсчитвает. Я проходил такие собесы, а потом смотришь на их реальные задачи, а они даже не близко к этому. Там на самом деле просто объёмные, но простые вещи. И эти задачи на собесе по итогу нафиг не упали. Я потом когда работу менял, то сразу извинялся, прощался и покидал зум когда они просилитна собесе вот такие вот тупые задачи решать, хотя портфолио моё видели заранее. В итоге остался в компании которая притащила на собес свою реальную задачу из своей такс-доски, я на словах рассказал чтобы и как решал и мы ударили по рукам. А зп там куда больше 180к и мы отлично работаем и по сей день.

    • @MrDima123123
      @MrDima123123 ปีที่แล้ว +7

      У нас есть очередь задач (пара тысяч м.б. в очереди), которую бэкенд присылает каждый раз, когда одна из задач обновляется. Если статус какой-то задачи изменился, то на фронтенде нужно вывести уведомление. Раньше мы сравнивали статусы 2-х наборов задач с помощью цикла в цикле. А теперь используем решение, аналогичное представленному в ролике.
      Так что ролик довольно полезный даже для программиста за 180 К

    • @dagaric2
      @dagaric2 ปีที่แล้ว +11

      ​@@MrDima123123если это не стёб, то соболезную

    • @dagaric2
      @dagaric2 ปีที่แล้ว +2

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

    • @MrDima123123
      @MrDima123123 ปีที่แล้ว +2

      @@dagaric2 какой ещё кэш сервера, какая оптимизация, ты о чем вообще?
      Ты адекватно способен свою точку зрения донести?

    • @dagaric2
      @dagaric2 ปีที่แล้ว +3

      @@MrDima123123из моего комментария Вам нужно было понять что на собеседовании спрашивали то, чем не занимаются, а занимаются тривиальными вещами. Но, видимо, Вы из тех клоунов, что для важности раздувают сопли.

  • @0x16z
    @0x16z 9 หลายเดือนก่อน +3

    Вот такие видео, отбивают у меня желание изучать программирование

  • @Lilli_425
    @Lilli_425 ปีที่แล้ว +15

    Прикол в том, что чем больше зп и грейд, тем легче задачи на собесах

    • @alexmishin2687
      @alexmishin2687 11 หลายเดือนก่อน +3

      В основном на опыт смотрят. Задачу дают чтобы проверить что не совсем врешь

  • @чибзик
    @чибзик 11 หลายเดือนก่อน +7

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

  • @ringostar4158
    @ringostar4158 3 หลายเดือนก่อน

    Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?

  • @G_Geralt
    @G_Geralt 10 หลายเดือนก่อน

    Спасибо, как раз изучал эту тему❤

  • @РишатКондратьев-б8и
    @РишатКондратьев-б8и 9 หลายเดือนก่อน +4

    Можно было бы просто попытаться добавить ключ символ в словарь, если уже есть просто выводить что этот символ повторяется😮

    • @Syeraen
      @Syeraen 9 หลายเดือนก่อน

      Тогда, будь в слове 3 одинаковых символа, такой символ бы ывелся дважды.
      Самое простое решение - преобразовать строку во множество.
      Конечно, операция можно занять немного больше времени, но понять её будет намного проще.

  • @ihnatmikhalkovich2538
    @ihnatmikhalkovich2538 10 หลายเดือนก่อน

    Показанное решение прекрасно. Хочу добавить ещё одно, чтобы была возможность выбора. Суть решения такая: сортируем массив стандартной либой (в Java Arrays.sort(arr), сложность merge сортировки) и получаем что одинаковые символы стоят рядом, запускаем массив который будет считать повторяющиеся элементы и если больше одного одинакового подряд - сохраняем. Сложность: O(N)

    • @Alex-ob7te
      @Alex-ob7te 9 หลายเดือนก่อน +1

      Сортировка nlogn

  • @МаргаритаПодвигина
    @МаргаритаПодвигина ปีที่แล้ว +38

    Можно в одну итерацию через map. Делаем +1 для map[element] и если map[element] ==2 , кладём элемент в результирующий массив)

    • @leniviy_uebok
      @leniviy_uebok ปีที่แล้ว +6

      нет разницы, и то и то - О(n)

    • @МаргаритаПодвигина
      @МаргаритаПодвигина ปีที่แล้ว

      @@leniviy_uebok да,но так не нужен второй цикл)

    • @ОлегАн-т5ж
      @ОлегАн-т5ж ปีที่แล้ว

      ​@@МаргаритаПодвигинабез разницы.

    • @Артём-с1о6н
      @Артём-с1о6н ปีที่แล้ว +2

      Лучше уже тогда >=2. Так как если будет 3 и более совпадающих элемента, у тебя из просто не выведет

    • @daniill3762
      @daniill3762 ปีที่แล้ว +3

      Map построен на основе бинарного дерева. Скорость этого варианта будет хуже, так как при каждом добавлении элемента в список (ну и проверки на наличие) будет выполняться поиск этого самого элемента, а поиск в бинарном дереве - logN. В итоге алгоритм обретет сложность NlogN.

  • @SuperBrightonBeach
    @SuperBrightonBeach ปีที่แล้ว +7

    А откуда в словаре взялись числа, обозначающие количество включений?

    • @VaeV1ct1s
      @VaeV1ct1s ปีที่แล้ว

      В цикле прошли по списку с записали символы в словарь, это же сказали в ролике

    • @MrLemurToes
      @MrLemurToes ปีที่แล้ว

      for i in range(len(word)) :
      key = word[i]
      map[key]++
      проходимся по слову, и увеличиваем счетчик в мапе, где ключ - символ. если написал с ошибками сори, не на питоне пишу)

    • @tupitochka8841
      @tupitochka8841 11 หลายเดือนก่อน

      @@VaeV1ct1s чтобы в словаре изменить число с 1 на 2, нужно найти в словаре, а это снова цикл. Никуда цикл не делся.

    • @VaeV1ct1s
      @VaeV1ct1s 11 หลายเดือนก่อน

      @@tupitochka8841 что ты несёшь? Обращение к элементу хешмапы по ключу за О(1)

    • @autodystopia
      @autodystopia 11 หลายเดือนก่อน

      @@tupitochka8841 в словаре не нужно ничего искать, на то он и словарь.

  • @burning_9280
    @burning_9280 10 หลายเดือนก่อน +1

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

  • @gr4ve789
    @gr4ve789 ปีที่แล้ว +4

    А ничего, что добавление в словарь приводит к memory reallocation (на что тратится хуева туча тактов ЦП) и для коротких строк типа ПОДПИШИСЬ цикл в цикле отработает быстрее?

    • @Torbjorn-ph7rt
      @Torbjorn-ph7rt ปีที่แล้ว

      Так ещё и выбор в словаре под капотом это по сути перебор

    • @gr4ve789
      @gr4ve789 11 หลายเดือนก่อน +3

      @@Torbjorn-ph7rt Словарь устроен так, что выборка значения происходит, грубо говоря, методом половинного деления. То бишь, для находжения одного элемента из миллиона перебор будет состоять из максимум 15 итераций, что есть очень быстро. Но вот добавление в словарь это действительно тяжелая операция с высокой стоимостью выполнения.

    • @OlegTar
      @OlegTar 8 หลายเดือนก่อน +1

      @@Torbjorn-ph7rt не перебор

  • @DiggerWithin
    @DiggerWithin ปีที่แล้ว +1

    А разве приведение строки к массиву чаров обязательно делать? String это же и так контейнер чаров, его сразу же в foreach и засунули бы...

    • @lightcode-group
      @lightcode-group  ปีที่แล้ว

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

  • @Mailkateam
    @Mailkateam ปีที่แล้ว +7

    А еще можно взять 32 битное число, и букву пихать в номер бита, соответствующий номеру буквы в алфавите, если бит итак равен 1, значит ранее буква встречалась, и выводим ее,

    • @easylifeproject
      @easylifeproject 10 หลายเดือนก่อน +2

      крестовый спалился

    • @ДенисСомин
      @ДенисСомин 10 หลายเดือนก่อน

      И на юникоде тебя попустят, а ещё это дополнительные такты на наложение маски и сдвиги.

    • @123Qwe-gc3ku
      @123Qwe-gc3ku 7 หลายเดือนก่อน

      А при чём здесь юникод или нет​@@ДенисСомин

  • @pavelbbb
    @pavelbbb 11 หลายเดือนก่อน +1

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

    • @krosha3158
      @krosha3158 11 หลายเดือนก่อน

      При идеальном хешировании сложность в худшем случае все равно будет константой. Если использовать другое хеширование, цепочками, например, то амортизированная сложность будет константой, что на практике +- соответствует О(1) в среднем для каждого запроса. Поэтому в видео все сказано правильно.

  • @АндрейШеин-х2е
    @АндрейШеин-х2е 9 หลายเดือนก่อน +1

    А зачем словарь, можно и массивом обойтись, символы можно и числам привести…

  • @andrewmad2890
    @andrewmad2890 10 หลายเดือนก่อน +2

    А как работает применяемый метод containskey? Что под капотом? Прогонялось ли это через stopwatch относительно цикла в цикле? И насколько разница, если она вообще есть?

    • @OlegTar
      @OlegTar 8 หลายเดือนก่อน

      В хэш-таблицах традиционно обращение к ключу имеет сложность O(1)

  • @pur0ta501
    @pur0ta501 7 หลายเดือนก่อน

    А доступ к элементам словаря как я понимаю бесплатный?

  • @MyMarsik
    @MyMarsik 11 หลายเดือนก่อน

    Массив кортежей символ - кол-во: (char, int)[] (2 варианта):
    s.Select(c => (c, s.Split(c).Length - 1)).Distinct().ToArray();
    s.GroupBy(c => c).Select(g => (g.Key, g.Count())).ToArray();

  • @konstantinmakarenkov8466
    @konstantinmakarenkov8466 11 หลายเดือนก่อน +1

    А ещё можно завести массив интов arr на 256 значений. И при чтении строки просто str в одном цикле делать arr[str[i] ]++. Сложность та же О(n), зато быстрее, чем со словарями.

    • @QwDragon
      @QwDragon 11 หลายเดือนก่อน

      На 65536. Юникодные времена сейчас.

    • @ДенисСомин
      @ДенисСомин 10 หลายเดือนก่อน

      ​@@QwDragonюникод это не только мелкомягкий ucs-2, но и utf-8, и utf-16 с суррогатными парами, и utf-32, так что 4гб запасай

  • @mikewazovsky150
    @mikewazovsky150 ปีที่แล้ว +2

    Интересно, а под капотом там что? То есть проверка, есть ли такой ключ или нет в словаре, это не такой же цикл?

    • @vladimirgoncharuk1586
      @vladimirgoncharuk1586 ปีที่แล้ว

      В среднем поиск в хеш-таблице О(1)
      Так как под «капотом» там лежит все тот же массив, а ключ это адрес ячейки массива, который прошел через хеш функцию

    • @tmeMishaGo
      @tmeMishaGo 10 หลายเดือนก่อน

      зависит от реализации "словаря". Обычно там дерево или хэш-таблица. В данном случае конечно же хэш-таблица нужна, но и дерево сойдет. На миллионе дерево лишь в 20 раз проиграет

  • @kuvo7944
    @kuvo7944 ปีที่แล้ว +1

    Ага, и я который только только начал изучать программирование : угу, понял, спасибо ебать

    • @АвамзачемЭто
      @АвамзачемЭто ปีที่แล้ว

      Ну и не получишь ты 180т.р , или на 40т.р. Получай знания, матан тебе в помощь

    • @kuvo7944
      @kuvo7944 ปีที่แล้ว

      @@АвамзачемЭто вы вообще о чём говорите ?

  • @cosinix
    @cosinix ปีที่แล้ว +1

    Слушай, а ты думаешь под капотом не происходит то же самое? Это не волшебная палочка все таки. Теперь уже внутри словарика при добавлении уже чужому коду надо определять была ли эта буква в словаре или нет.

  • @tamerlanishmaev697
    @tamerlanishmaev697 ปีที่แล้ว +4

    Нифига у шарпистов задачи 😅

    • @lightcode-group
      @lightcode-group  ปีที่แล้ว

      Дело не в языке. Это лишь одна из списка задач на собесах. А не та задача, решив которую тебе дадут оффер). Зачастую на собесе целый ряд задач разного уровня сложности. Данная задача популярная из списка простых.

  • @gamingstar4206
    @gamingstar4206 11 หลายเดือนก่อน +1

    Зачем создавался массив characters? foreach прекрасно кушает строки. Плюс использование var крайне не рекомендую - читабельность и понятность кода резко снижается. До вывода на экран докапываться не буду, но по факту он очень долгий (лучше использовать StringBuilder).
    Да и задача, прошу прощения, для первокурсника. Не представляю кто вообще не способен такую задачу решить. По-моему такая задача бесполезна.

  • @theone1685
    @theone1685 ปีที่แล้ว +1

    Класс, было интересно 🔥

  • @MightyMindsDev
    @MightyMindsDev หลายเดือนก่อน

    Можно еще отсортировать строку и если следующий элемент не больше предедущего, добалять его в овтет. Тогда сложностт по времени будет (n*logn) а по памяти O(1)

  • @ИванВоронин-и2м
    @ИванВоронин-и2м 11 หลายเดือนก่อน

    Какие словари, какие хэши? Сортировка подсчётом.
    Или символы какие-то особенные, unicode32?
    Такие вещи нужно оговаривать.

  • @MultikValentin78
    @MultikValentin78 11 หลายเดือนก่อน +1

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

    • @vvalik
      @vvalik 11 หลายเดือนก่อน

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

    • @plur_ndbn
      @plur_ndbn 10 หลายเดือนก่อน

      ​@@vvalik какая сортировка у тебя память требует?

  • @chu_ri5470
    @chu_ri5470 ปีที่แล้ว +1

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

  • @dimakokc2399
    @dimakokc2399 ปีที่แล้ว +1

    А эти скорости типа n^2 или 2n где-то применяются? Стоит их учить?

    • @lightcode-group
      @lightcode-group  ปีที่แล้ว +1

      Это называется Big O нотация. Сильно углубляться в нее может и не стоит просто так, но базовое понимание точно должно быть, чтобы ты мог оценить примерно свой придуманный алгоритм при решении той или иной задачи на работе. Без такого понимания ты можешь выдать решение, оно будет медленным и ты не будешь понимать, что в нем не так и как исправить.

    • @la_maksim
      @la_maksim ปีที่แล้ว

      @@lightcode-groupразве n^2 ? Мы же поидеи изменяем на -1 кол-во проверяемых символов, и в конце будет только 2 символа

    • @АлександрГромов-г4ч
      @АлександрГромов-г4ч ปีที่แล้ว

      @@la_maksimвсего переборов будет n(n-1)/2, но для оценки сложности коэффициенты опускаются, получается n^2. Попросту это значит, что если увеличить число входных параметров (длину строки) в n раз, то время работы программы увеличится в n^2 раз

    • @dreykanbern1453
      @dreykanbern1453 ปีที่แล้ว

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

  • @Mover_R
    @Mover_R ปีที่แล้ว +33

    Алгоритмическая сложность воего решения О(N*logN) тк обращение к словарю производится за логарифм, лучше было бы создать массив в котором индекс будет равен инжексу буквы, и обращаться к этому за О(1), тогда ты получишь решение за линию и за столько же памяти

    • @АнтонПичушкин-у6р
      @АнтонПичушкин-у6р ปีที่แล้ว +4

      Это неправда. Словарь в питоне это хешмапа. А в хешмапа за единичку. В С++ это были бы правдой, там структура map построена на красно-черном дереве, и вставка в неё действительно за logn, но в тех же плюсах есть unordered_map, которая хешмапа, и в которую вставлять за единичку опять же
      Короче словарь в видео неправильное слово. Правильное - хешмапа

    • @ОлегАн-т5ж
      @ОлегАн-т5ж ปีที่แล้ว

      К чему обращаться? Где ты будеш хранить количество встреч с конкретной буквой? В массиве? Интересно как?

    • @reqvier4299
      @reqvier4299 ปีที่แล้ว +4

      ​@@АнтонПичушкин-у6р это не правда. Прочитай про устройство хешмапы. Она не работает за единичку
      Так что надо пользоваться мапой обычной, а в данной задаче где входные значения сильно ограничены - можно просто создать массив и в нём хранить, что действительно будет работать суммарно за линию

    • @MikhailVinogradov-nk7kd
      @MikhailVinogradov-nk7kd ปีที่แล้ว +2

      ​@@ОлегАн-т5жесли строка содержит для примера только латиницу нижнего регистра, то создаёшь массив размера 26, ячейки в котором содержат количество вхождений символа в строку (в коде это выглядит как то так arr[ch-'a']++, где ch - символ строки). Что сложного? И максимум это задача для стажёра.

    • @ОлегАн-т5ж
      @ОлегАн-т5ж ปีที่แล้ว

      @@MikhailVinogradov-nk7kd Слышу звон но не знаю где он? Еще раз, мой вопрос адресован комментатору который предлагает создать ОДИН МАССИВ где по номеру индексу будет СОДЕРЖАТЬСЯ буква. Возникает вопрос ЕСЛИ У ТЕБЯ ТОЛЬКО ОДИН МАССИВ где уже СОДЕРЖАТЬСЯ БУКВЫ то где ты будешь хранить количество встреч этой буквы? Что сложного? Читай ВНИМАТЕЛЬНО ТЗ а не умничай.

  • @archibald3544
    @archibald3544 ปีที่แล้ว

    string = 'подпишись'
    symbs = [i for i in string if string.count(i) > 1]
    print(set(symbs))

  • @Wings_Vlog
    @Wings_Vlog ปีที่แล้ว +4

    Спасибо за разбор задачи! Можно больше таких видео?😅

  • @ahil7800
    @ahil7800 11 หลายเดือนก่อน

    А ещё в модуле collection есть метод counter, который сразу выводит ключ- символ, значение - количество символов в строке.

  • @kucer0043-Games
    @kucer0043-Games 9 หลายเดือนก่อน

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

  • @Просветление-я9м
    @Просветление-я9м ปีที่แล้ว +1

    Есть же встроенная функция подсчёта повторяющихся символов)

    • @XR0M
      @XR0M ปีที่แล้ว

      Так и на собесах в первую очередь спрашивают алгоритмическое мышление, а не знание методов🤷🏻‍♂️

  • @КлодёттФорель
    @КлодёттФорель ปีที่แล้ว +10

    Решить можно одним циклом, если при повторном появлении сразу принтить букву

    • @n1ret
      @n1ret ปีที่แล้ว +1

      а если 3 раза будет?

    • @MrAlbertl
      @MrAlbertl ปีที่แล้ว +1

      @@n1retна == 2 выводить только

    • @АлексейВаськов-с2п
      @АлексейВаськов-с2п ปีที่แล้ว

      Придется делать find на каждый символ. И тут уже будет зависеть от типа данных, где символы лежат. HashSet будет оптимальным наверное

  • @АлексейКоваленко-н2ч
    @АлексейКоваленко-н2ч ปีที่แล้ว

    Что это за сфера и язык?

  • @НевероятныйНевероятный
    @НевероятныйНевероятный ปีที่แล้ว +2

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

    • @АлександрБородулин-т1ж
      @АлександрБородулин-т1ж 11 หลายเดือนก่อน

      Верно подметил. Сейчас страшно смотреть сколько браузер памяти кушает :D Как по мне на проц пофиг он невероятно мощный, а вот память по прежнему узкое место)

  • @dreykanbern1453
    @dreykanbern1453 ปีที่แล้ว +4

    Переводим в массив или объект, используем set, потому что это даст нам только уникальные значения в коллекции, далее выводим те значения, которые убрал сет и получаем коллекцию уникальных значений и какую-то структуру на свой выбор из повторяющихся

    • @n1ret
      @n1ret ปีที่แล้ว

      через hashmap быстрее будет

    • @alexeikmw
      @alexeikmw ปีที่แล้ว

      Я тоже так делал на курсах. Только у нас не слово было а массив из 25000 ip адресов. 😂

    • @dreykanbern1453
      @dreykanbern1453 ปีที่แล้ว

      @@alexeikmw задачка фронтовичка помучить, с реальными тасками на бекенде ничего общего не имеет

    • @vryaboshapko
      @vryaboshapko ปีที่แล้ว +1

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

    • @dreykanbern1453
      @dreykanbern1453 ปีที่แล้ว

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

  • @x_xp9259
    @x_xp9259 ปีที่แล้ว +1

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

    • @thedotareview9748
      @thedotareview9748 3 หลายเดือนก่อน

      В пределе нет, всё равно будет квадратичная сложность

  • @Djdjdjdjmemeo
    @Djdjdjdjmemeo 6 หลายเดือนก่อน

    А правильро ли будет пройтись по СТРОКЕ двумя цыклами фор?

  • @mousaaminov
    @mousaaminov ปีที่แล้ว +3

    Ээ, почему лайк ставится сам по себе😁

  • @dobre4ok065
    @dobre4ok065 ปีที่แล้ว +2

    Можно через каунт и условие мне кажется

  • @timur.shhhhh
    @timur.shhhhh ปีที่แล้ว +1

    Вспомнил видео от Алек Ос «как уместить программу в 8000 бит/байт»

  • @ИльяШвамбергер-у6в
    @ИльяШвамбергер-у6в ปีที่แล้ว +2

    Можно использовать битовые операции.

  • @Гуамоколатокинт-ч4и
    @Гуамоколатокинт-ч4и ปีที่แล้ว +1

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

  • @vovchic3593
    @vovchic3593 ปีที่แล้ว +1

    Python погнали
    print(*set(filter(lambda x: a.count(x) > 1, a:=input())))

    • @ismism4782
      @ismism4782 11 หลายเดือนก่อน

      Как вариант)
      print(* map(lambda x: x[0], filter(lambda x: x[1] > 1, Counter(input()).most_common())))

    • @vovchic3593
      @vovchic3593 10 หลายเดือนก่อน

      @@drm365 Смысл был не в эффективности, а в том, чтобы вместить всё в одну инструкцию. Убрав переносы строк, ты не уменьшишь кол-во инструкций. Сложность O(N^2), да, неэффективно.

  • @igorgordiy7709
    @igorgordiy7709 10 หลายเดือนก่อน

    Используем Counter из collections на питоне и решаем задачу в одну строку и за 3 секунды))

  • @darigan272
    @darigan272 9 หลายเดือนก่อน

    Ля, на бесплатных курсах задачи сложнее в разы😂

  • @иванпетров-в3з
    @иванпетров-в3з ปีที่แล้ว +1

    А в Set положить нельзя?)

    • @OlegTar
      @OlegTar 8 หลายเดือนก่อน

      можно

  • @pavlikt.2281
    @pavlikt.2281 ปีที่แล้ว +1

    хитрец какой!

  • @Yuliya_0106
    @Yuliya_0106 ปีที่แล้ว +1

    Крутоооо 😮

  • @_daniilpetrenko
    @_daniilpetrenko ปีที่แล้ว

    А зачем дважды проходить массив если мы можем каждое значение записать в массив и проверять каждое следующее существует ли оно в массиве

    • @lekretka
      @lekretka 11 หลายเดือนก่อน

      Проверка на наличие элемента в массиве или листе тоже работает через цикл. Алгоритмическая сложность та же.

  • @user-vks-o8t
    @user-vks-o8t ปีที่แล้ว +1

    Почему просто множеством нельзя было обойтись, зачем тут словарь городить?

    • @giveuper39
      @giveuper39 ปีที่แล้ว

      Неупорядоченное множество, обычный set в плюсах за логарифм проверяет, с unordered set за О(1)

  • @invinciblecame7336
    @invinciblecame7336 9 หลายเดือนก่อน

    Делаем масив интов на 255 эллементов и делаем arr[ch[i]]++ для всех символов строки. Это, наверно, самый быстрый способ, у него гарантировано точность O(n), цикл прохода по строке содержит только 1 строку в которой нет ни условного оператора, ни вызова функций с неизвестной собственной сложностью. А использование метода из видоса вполне возможно имеет сложность O(n²).

  • @Drawi26
    @Drawi26 ปีที่แล้ว +2

    Генератором посчитать 5 сек, так что не думаю, что тут можно говорить о 180к, ну а если и так, то я, заканчивающий 11 класс, могу прретендовать на должность мидла

  • @РоРо-ш8ч
    @РоРо-ш8ч ปีที่แล้ว +1

    а отсортировать и уплотнить нет такой возможности в языке?

    • @lightcode-group
      @lightcode-group  ปีที่แล้ว +1

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

    • @НиколайВоронин-о7ъ
      @НиколайВоронин-о7ъ ปีที่แล้ว +1

      Сортировка - О(NlogN)

  • @yhauberkpal1464
    @yhauberkpal1464 9 หลายเดือนก่อน

    Только вот переход по ключю в словаре не O от единицы

  • @КрашеныйЛис
    @КрашеныйЛис ปีที่แล้ว +2

    Так можно просто регуляркой почистить строку

    • @lightcode-group
      @lightcode-group  ปีที่แล้ว +1

      Можно, это уже более продвинутое решение.

    • @VaeV1ct1s
      @VaeV1ct1s ปีที่แล้ว

      Сложность по времени больше

  • @m20mike
    @m20mike ปีที่แล้ว

    180 тысяч чего? И за какой срок?

  • @serghell6053
    @serghell6053 ปีที่แล้ว +1

    чел!!! O(N) - ты не получишь! А накладные расходы для поддержки хештаблицы? Те ты считаешь, что запись в хештаблицу моментально пишется?
    Говорить, что В РАЗЫ - автор, ты реально теоретик?

    • @MykytaKryvoruk
      @MykytaKryvoruk 11 หลายเดือนก่อน +1

      Друг, тут речь не идёт о том, что будет по факту исполняться в разы быстрее, а про чисто теоретическое big O. И автор все правильно сказал. Цикл в цикле это действительно сложность O(n²), а цикл с хэштейблом - O(n), что в чистой теории очевидно намного лучше. Хеш таблицы тут как пример и могут быть заменены, а подход действительно алгоритмически более правильный

    • @TheSkotcher
      @TheSkotcher 10 หลายเดือนก่อน

      Формально говоря, Хэш-таблица работает за О(1+а), где а - коэффициент заполнения, но ожидаемое время работы константное, при благоприятном(минимальном) числе коллизий

  • @Роман-в4т4е
    @Роман-в4т4е ปีที่แล้ว

    Пипец дожили, детская задача на 180к 😂

  • @НатальяГонцова-э6й
    @НатальяГонцова-э6й ปีที่แล้ว +1

    А зачем хэш-таблица, а не просто массив? У нас же не бесконечное количество символов

    • @vvalik
      @vvalik 11 หลายเดือนก่อน

      а если алфавит неизвестен?

    • @НатальяГонцова-э6й
      @НатальяГонцова-э6й 11 หลายเดือนก่อน

      @@vvalik значит сначала нужно узнать алфавит, иначе считать алфавит как с бесконечным числом символов, для которого понадобится соответствующая хэш-таблица, и подход к решению задачи будет иным. Мне, конечно же, очень нужна хэш-таблица для алфавита с 1 символом. Точно так же, как она нужна мне и для алфавита с n количеством символов, где можно изначально использовать статическую структуру данных, работающую быстрее. А если бы нужно было слова посчитать - совсем другое дело

  • @DarkViper813
    @DarkViper813 ปีที่แล้ว +5

    Лёгенькая задача, наверное для джунов такие дают

    • @ОлегАн-т5ж
      @ОлегАн-т5ж ปีที่แล้ว

      Без проблем, как опытному сразу после решение дополнение (А теперь за О(n) без коллекций) и тут все становиться не совсем так сладко.

  • @РоРо-ш8ч
    @РоРо-ш8ч ปีที่แล้ว +4

    test_list = list(set(test_list))

    • @skeksoos
      @skeksoos ปีที่แล้ว

      Ты убрал повторения, но не вывел их, аутист

    • @ОлегАн-т5ж
      @ОлегАн-т5ж ปีที่แล้ว

      Это YoptaSkript?

    • @vryaboshapko
      @vryaboshapko ปีที่แล้ว +1

      Просто перевести в сет мало, так мы получим все уникальные буквы. То есть, и те, что встречаются 5 раз, и те, что только по одному разу.

    • @РоРо-ш8ч
      @РоРо-ш8ч ปีที่แล้ว

      @@ОлегАн-т5ж xуёпта мудила

  • @konstantintsepelev7857
    @konstantintsepelev7857 11 หลายเดือนก่อน

    Берем жс, берем массив, пихаем в сет, Всё O(1)

  • @elmarazimkulov8137
    @elmarazimkulov8137 ปีที่แล้ว +1

    Легче в сет добавлять и повторяющие вывести, один цикл

    • @plur_ndbn
      @plur_ndbn 10 หลายเดือนก่อน

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

  • @СашкоВиктор
    @СашкоВиктор ปีที่แล้ว

    эм регулку, можно использовать нет?
    let a = 'подпишись';
    for(let el of a) {
    let arr = a.match(new RegExp(`${el}`, 'gi'));
    if(arr.length >1) {
    console.log(el)
    }
    }
    на js вот так выглядит)

  • @smash3394
    @smash3394 10 หลายเดือนก่อน

    Давай больше

  • @ІП-12СпаськихМикола
    @ІП-12СпаськихМикола ปีที่แล้ว +2

    прикольно

  • @shcherbanev
    @shcherbanev ปีที่แล้ว +4

    Решил но наверное не самым выгодным способом по памяти, создал массив длины 27 (колво букв в алфавите) и в а[0] добавлял +1 когда встречал букву a, в а[1] b и по аналогии, потом смотрел где больше 1, и выводил буквы

    • @giveuper39
      @giveuper39 ปีที่แล้ว +1

      Это кстати самая простая имплементация хэш таблицы, где хэш функция - номер этой буквы)

    • @MrLuckyTomas
      @MrLuckyTomas ปีที่แล้ว +1

      Идея хорошая, но надо брать не кол-во букв в алфавите, а кол-во ASCII символов, если кодировка строки в ASCII. Тогда и англ и русский и пробелы и другие символы тоже будут работать. Единственное если кодировка будет 4 байтовая, то такой массив получится в 4 гб и тут придется или хитрить с битами или еще что-то придумывать, в большинстве случаев при такой большой кодировке метод из видео будет эффективнее.

  • @Morgot93
    @Morgot93 ปีที่แล้ว

    Для больших строк space complexity будет неприемлемый. Есть более продвинутое и быстрое решение

  • @goodyit
    @goodyit ปีที่แล้ว +1

    Это шутка какая-то? Эту задачу решит 9классник без всяких квадратичных сложностей...

    • @ОлегАн-т5ж
      @ОлегАн-т5ж ปีที่แล้ว

      Вперёд, сложность О(n) без использования коллекций.

    • @jupiter_hd
      @jupiter_hd ปีที่แล้ว +1

      ​​@@ОлегАн-т5жну, во-первых, никто не говорил про про неиспользование коллекций. во-вторых, задача действительно максимально простая, так еще и у автора видео не лучший вариант решения.

  • @chaynik1439
    @chaynik1439 ปีที่แล้ว

    Это можно просто решить через сет циклом фор и принтовать с join

  • @ekaterinakardi2285
    @ekaterinakardi2285 9 หลายเดือนก่อน

    Фрост лист и всё дела. Сравни массивы получившийся и исходный и все

  • @АндрейСадердинов
    @АндрейСадердинов 9 หลายเดือนก่อน

    Ну хз мне на ум сразу же словарик пришел

  • @InStoKiller
    @InStoKiller 11 หลายเดือนก่อน

    А распиши этот алгоритм на си😂

  • @rainbowfamily3231
    @rainbowfamily3231 ปีที่แล้ว +1

    Set ? XOR? Не?

    • @MrLuckyTomas
      @MrLuckyTomas ปีที่แล้ว

      Set медленно, XOR определит если было нечетное кол-во повторений. Или ты знаешь как им в принципе повторения спалить?

  • @НикитаТеличко-ч4э
    @НикитаТеличко-ч4э 11 หลายเดือนก่อน

    Как я сюда попал? Видимо, я тут, в комментариях, единственный не программист и ничего не понял

  • @IhorKresiun-p3e
    @IhorKresiun-p3e ปีที่แล้ว +1

    А есть решение на чистом C?

  • @Wansery
    @Wansery ปีที่แล้ว +1

    За такие простые задачи 180 платят? Ну и ну... Это обычная джуновская задачка 7-8kyu в code wars

    • @lightcode-group
      @lightcode-group  ปีที่แล้ว

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

  • @kpecmuk
    @kpecmuk ปีที่แล้ว +4

    Надо бы проверять на реальное быстродействие. Какие там алгоритмы работают при составлении списков, добавлении, чтении... да чёрт его знает. Может быть рельно быстрее работает первый способ.

    • @giveuper39
      @giveuper39 ปีที่แล้ว

      Если проверять на большом слове из миллиона букв, то гораздо быстрее именно второй способ, какой бы ни была реализация

  • @artursveshnikov7668
    @artursveshnikov7668 ปีที่แล้ว +2

    Это задача, которой бездельники-ютуберы, которым лень сделать что-то полезное, кормят своих подписчиков.
    Кстати, прикинь, в первом предложении есть вложенное лексическое условие. Я почти прошёл собес на филолога с зп 180к.
    И если тебе важно сохранить порядок символов, хеш таблица не подходит, тк она сортирует по значению хеш функции.

    • @ДенисСомин
      @ДенисСомин 10 หลายเดือนก่อน

      Так иди на cf за нормальными задачами, а не ной в коммах, его решение с хешмапой подходит, т.к. он два прохода делает.

  • @АлексШест-ь4у
    @АлексШест-ь4у ปีที่แล้ว +1

    Я ни хрена не понимаю в этих программах! Но скажите где это применяется, что за радость такая подсчитать колличество повторяющихся букв в слове?

  • @QwDragon
    @QwDragon 11 หลายเดือนก่อน

    Не будет первый вариант правильно работать когда буква больше 2 раз встретится.

  • @ВикторТерлыга
    @ВикторТерлыга ปีที่แล้ว +1

    Думал за 180 тыщ использт регулярные выражения

    • @lightcode-group
      @lightcode-group  ปีที่แล้ว

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

    • @ПроМойМаркетплейс
      @ПроМойМаркетплейс ปีที่แล้ว

      Регулярка это на стажёра и бесплатно.
      Чат гпт тебе любую регулярку напишет

  • @IlyaJuhnowski
    @IlyaJuhnowski 11 หลายเดือนก่อน

    Не надо идти к тем, кто на собесе задает такие задачи.Тем более и деньги небольшие.

  • @dellack130
    @dellack130 10 หลายเดือนก่อน

    Надо превратить каждый элемент в ассоциатывный массив. А потом просто его вывести по порядку, вск

    • @dellack130
      @dellack130 10 หลายเดือนก่อน

      всё@@drm365

  • @ИванРодстванепомнящий-о7х
    @ИванРодстванепомнящий-о7х 10 หลายเดือนก่อน

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

  • @kephec6233
    @kephec6233 ปีที่แล้ว +1

    Не досмотрел до конца, я бы создал ассоциативный массив ключ - символ, значение счетчик...

    • @lightcode-group
      @lightcode-group  ปีที่แล้ว

      В видео такое решение и предлагалось)

    • @NotIce684
      @NotIce684 11 หลายเดือนก่อน

      А счетчик зачем? В задаче не нужен подсчет количества.

  • @Solaris5000
    @Solaris5000 ปีที่แล้ว +1

    Пизец, где мои 180к$

    • @Wings_Vlog
      @Wings_Vlog ปีที่แล้ว

      Иди на собес, лутай 180к+

    • @Solaris5000
      @Solaris5000 ปีที่แล้ว

      @@Wings_Vlog спасибо, сходил, правда 180к+ тенге, но тоже неплохо для стажа в 0 лет

    • @Wings_Vlog
      @Wings_Vlog ปีที่แล้ว

      @@Solaris5000 так автор может не про рубли говорил, все по факту😂

  • @xdraginx2863
    @xdraginx2863 11 หลายเดือนก่อน

    Через count решить можно

  • @user-opas
    @user-opas 10 หลายเดือนก่อน

    count курит в стороне

  • @elmarrasulzade2043
    @elmarrasulzade2043 ปีที่แล้ว

    Зачем считать количество.Если буква уже есть то выводим ее и стами значение больще чем 2 чтобы не выводить опять. Один проход

  • @Neo-fi5zr
    @Neo-fi5zr ปีที่แล้ว +6

    Рискну предположить, что в мапе добавление n элементов за O(n * log n )

    • @brinza888
      @brinza888 ปีที่แล้ว

      Мапа и хэш-таблица различаются. Добавление в хэш-таблицу - константа.

    • @Neo-fi5zr
      @Neo-fi5zr ปีที่แล้ว

      ​@@brinza888, в хэш-таблицу, ок, но под словарём я понимаю map, а там n log n

    • @brinza888
      @brinza888 ปีที่แล้ว

      @@Neo-fi5zr и словарь и map, это структура данных с одинаковым интерфейсом, поэтому сложно сказать как и что правильнее называть, у всех по-разному.
      Но я придерживаюсь того, что словарь основан на хэш-таблице, а map основана на бинарном дереве поиска.

  • @solbliaa4048
    @solbliaa4048 9 หลายเดือนก่อน

    У меня вопрос зачем это нужно

    • @OlegTar
      @OlegTar 8 หลายเดือนก่อน

      Чтобы выбирать правильную структуру данных. Не делать перебор по массиву, когда можно использовать словарь.