Alexandr
тогда другое решение, отличное от рекурсии, а то я думал ты просто переписал рекурсию через стек. тогда я не понял как через очередь, в чем смысл точнее 😃
изначально подумал, что groups можно как очередь использовать, но потом сразу понял, что раз новых элементов туда добавлять не будем, то можно просто через groupIndex итерироваться :) В общем, мне кажется, что решение через рекурсию прикольное и к нему даже сложнее прийти :)
Sergey Ufocoder
https://vk.com/wall-17796776_9859
Viktor
https://vk.com/wall-17796776_9859
Во, отлично! Понял теперь.
Stas
А почему сложность m+n? Мы же для каждого n проходим по группе из m элементов это же будет порядка m*n в итоге?
Viktor
А почему сложность m+n? Мы же для каждого n проходим по группе из m элементов это же будет порядка m*n в итоге?
мы не для каждого элемента проходим по группе элементом. мы ищем первое совпадение и проверяем текущую группу. хотя, я согласен, что в худшем случае может быть как поиск подстроки в строке, если «правильно» подобрать группы.
Viktor
можно сделать n * len, где len — самая длинная группа
Viktor
arr = [1,1,1,1,2], g = [[1,1,2]] т.е. например так
Viktor
чтобы был общий префикс и поиск постоянно пробегал почти до конца группы
Lynn «Кофеман»
Да сложность как-то странно посчитана
Viktor
но если мы все же группу нашли, то от массива останется только хвост и поиск для следующей группы. поэтому n * m не может быть.
Viktor
Да сложность как-то странно посчитана
да, я что-то прогнал, не учёл пример выше. надо n * L переписать.
Lynn «Кофеман»
Учитывая ранние выходы по хорошему нужны оценки среднего и худшего случая. Как у quicksort
Viktor
а не худшая
Stas
а не худшая
Ну да я так доже подумал, вообще не самый тривиальный пример, часть отбрасывается, но если ничего не совпадает то по идее будет (n-m)*m операций, что порядка n*m
Viktor
типа в итоге сравнишь всё со всем. грубо говоря.
Stas
если второе, то да, согласен, n * m
Ну типа того я просто для одной группы рассуждал, а так будет видимо сумма)
Порридж В Ко-ливинге
@vitkarpov Вам подарок за счет заведения: Один алгоритм с иллюстрациями и объяснениями: https://leetcode.com/problems/search-a-2d-matrix-ii/discuss/1079082/Python-C%2B%2B-O(M-%2B-N)-Explained-just-walk-from-Top-Right-corner
Порридж В Ко-ливинге
анимация в конце прекрасна.
Пхахах, она из статьи на которую я дал (2 раза) ссылку 🤣
Viktor
Пхахах, она из статьи на которую я дал (2 раза) ссылку 🤣
не важно, все равно анимация прекрасна. нужно больше таких статей.
Порридж В Ко-ливинге
не важно, все равно анимация прекрасна. нужно больше таких статей.
Пхаха, если щас апвоутов набежит, то буду продолжать
Порридж В Ко-ливинге
Прошу пояснительную бригаду фронтендеров…
Anton
Прошу пояснительную бригаду фронтендеров…
Если это VSCode, то попробуй перезагрузить окно. Иногда такое бывает, что что-то сломалось во взаимодействии редактора и сервера компилятора ¯\_(ツ)_/¯ Ну и на всякий случай проверь, что у тебя нужная версия ts используется
Anton
Прошу пояснительную бригаду фронтендеров…
Хм, ещё возможно, что там start может быть null?
Порридж В Ко-ливинге
Не, тут вообще какой-то !@#$% твориться. У меня даже console.log() не работает. Это последний раз когда я с react-native работаю...
Lynn «Кофеман»
Прошу пояснительную бригаду фронтендеров…
TS недостаточно умный что бы помнить доступ к свойствам. Или наоборот слишком умный, т.к. свойство может быть геттером и выдавать разный результат. Поэтому он не может из проверки строкой выше исключить null. Используй start.current!.measure
Lynn «Кофеман»
Или присвой current в переменную и проверяй её
Roman
А кто-нибудь пробовал подаваться на stackoverflow в разделе remote? Там столько интересных и сочных проектов
Viktor
А кто-нибудь пробовал подаваться на stackoverflow в разделе remote? Там столько интересных и сочных проектов
Имхо, общая рекомендация — надо спрашивать про визу, так как некоторые удаленные позиции подразумевают ремоут из страны компании. Иначе они не смогут оформить правильно, типа не работают с ИП.
Viktor
А так кажется хорошая идея, почему нет.
Ali
Прошу пояснительную бригаду фронтендеров…
У тебя ключ current возвращает null, то что у тебя проверка вверху ничем не поможет, так как у тебя где то в типе указано что start.current = null
Ilia
TS недостаточно умный что бы помнить доступ к свойствам. Или наоборот слишком умный, т.к. свойство может быть геттером и выдавать разный результат. Поэтому он не может из проверки строкой выше исключить null. Используй start.current!.measure
Сужать типы после проверки тс умеет, тут проблема другая, в реф явно не передан тип того, что там будет храниться, и поэтому реакт считает что в юзреф передали тип нулл(если я правильно понимаю, что используется юзреф)
Lynn «Кофеман»
Т.е. в примере выше надо сделать const current = start.current и уже для этой переменной ts сможет внутри if сузить тип
Ilia
Насколько я знаю, тс сужает типы только для переменных. Потому что const a = { get x() { return Math.random() < .5 ? null : this } } if (a.x !== null) { a.x.x // oops }
внутри класса точно умеет, на классах в начале методов часто делаю early return из-за опционального поля класса, this.prop тип сужает легко
Ilia
нельзя сузить нулл до какого-то типа, т.к. это единственный тип )
вот пример, не указан дженерик, тип current считается как нулл
Ilia
указан тип, тип легко сужается и подсказывает что можно выбрать
Lynn «Кофеман»
Да внутри класса я не пробовал
Ilia
вот пример, не указан дженерик, тип current считается как нулл
это следствие автоматических выводов типов для дженериков. если не указан тип, то тс пытается его сам вывести на основе переданных параметров, а если указан в дженерике, то он использует только то, что указан и сам не выводит ничего
Порридж В Ко-ливинге
Так, мини исследование, кто мне сегдня кидал апвоуты или даунвоуты, в Литкоде?
Alex Azarov
Порридж В Ко-ливинге
Кстати да, помню недавно было 6 апвоутов, сейчас 4)))
Ты чекал? Я просто весь день робил в выходные, Яндекс))0) Щас зашел, недовольный сижу
Alex Azarov
Я недавно чекал и было 6, да Ну это Яндекс привыкай)))(
Roman
@vitkarpov spam^^^
Yuri
ребята, а вот есть у графов представление в виде adjacency list. А почему в нем списки используются, а не Set'ы например?
Viktor
ребята, а вот есть у графов представление в виде adjacency list. А почему в нем списки используются, а не Set'ы например?
А зачем тебе там сет, что ты собрался в нем искать? По-моему, там нужен список чтобы по нему пробежаться и всё.
Viktor
Один хрен зачастую нужны все детки при поиске.
Yuri
гм, ну вот например берем какой-нить DFS-поиск. Приятно же за O(1) проверить, есть ли искомый элемент в соседях у текущего
Yuri
просто ведь пробегаться по всем элементам set'а так же приятно, как по всем элементам массива/списка, а искать при этом быстрее
Viktor
гм, ну вот например берем какой-нить DFS-поиск. Приятно же за O(1) проверить, есть ли искомый элемент в соседях у текущего
так а как это поможет? если его нет — он может быть где-то дальше, на следующих уровнях, поэтому пробегаться DFS-ом надо по всем узлам. Кстати, при поиске именно пути от узла до узла выгоднее BFS.
Viktor
а если ты возможности сета никак не используешь, это может выглядеть как карго-культ. а это уже красный флаг.
Yuri
да, пожалуй, это микрооптимизация
Порридж В Ко-ливинге
Такое мотивирует писать объяснялки дальше 💪 https://leetcode.com/problems/broken-calculator/discuss/1076042/python-c-explanation-with-illustration-why-we-should-work-with-y-not-x
Порридж В Ко-ливинге
Походу надо с картинками только. Жаль что не все задачки можно картинками расписыватьб
Viktor
Походу надо с картинками только. Жаль что не все задачки можно картинками расписыватьб
Вот это хороший вопрос, кстати. Может можно? Только мы пока не знаем как.
Viktor
Не все задачи интересные достаточно для того, чтобы тратить на это время, уж точно.
Порридж В Ко-ливинге
Ого, Клепман ушел из Линкеин чтобы написать кабанчика 🐗🙀 Full time work on writing my book
Viktor
Может быть универ его спонсировал, а-ля грант какой.
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Я кстати понял в чем фишка скрама или эджайла, так и не поня что к чему, но короче кор фишка - перекладывать задачи на следующий спринт 🤣
Порридж В Ко-ливинге
😆
Nikita
Какой же странный JS язык( Вроде вот ввели структуру данных Set ребята в своем языке, но кажется с понятиями "множеств" вообще не были знакомы. Такие очевидные операции над множествами как объединение, разность, пересечение, сим разность, ребята вообще не поддержали. То есть там надо реально вывернуться, чтобы написать какую-нибудь сим разность (в то время как в python A ^ B). Ладно перегрузка операторов, но ребята даже не заморочились методы классов хотя бы сделать а-ля union, intersect и тд
Nikita
Я кстати понял в чем фишка скрама или эджайла, так и не поня что к чему, но короче кор фишка - перекладывать задачи на следующий спринт 🤣
Перекладывать задачи/тикеты и джейсоны из спринта в спринт в Яндексе профессионально умеют👍🤣