Порридж В Ко-ливинге
это время за последнюю задачу, а не за всё
Ну да, но последняя = все предыдущая + последняя
Владъ
Evgeniy
Похоже вижу. Есть такие
Evgeniy
Тут на 6 месте
Evgeniy
Интересно сегодня.. Какое-то хитрое дп? 🤔 Хард
На префиксных суммах можно решить, в лоб. Средне по времени. O(m^2*n^2)
Evgeniy
m и n — ширина и высота матрицы
Bartsev
Все привет, подскажите, простая задача фильтровать массив пользователей вторым параметром динамический фильтр приходит, я решил вот таким способом https://replit.com/@shmel115/spy#index.js но не смог упростить, сейчас как я понимаю О(N*A) сложность?
Viktor
Привет. Знакомая задачка. Надо по ключам построить индекс, и потом искать быстро можно будет.
Я ж правильно понял задачу, что нужно по ключу (возраст, имя, и тд) фильтровать юзеров?
Ilia
@vitkarpov у тебя случайно брата в Москве нет? :) менеджер в автосалоне очень на тебя похож будто :))
Viktor
Может это я. Прикидываюсь прогером, а сам в автосалоне фигачу.
Viktor
Да )
А зовут Денис?
Viktor
Если нет, то нет. Если да, то возможно.
Ilia
А зовут Денис?
Александр )
Viktor
Тогда нет 😃
Viktor
Да фильтр может быть разной длины, т.е. набор ключей
Я правильно понял, что ты для каждого ключа сейчас пробегаешься по всем юзерам? (Или наоборот) если бы был индекс для каждого фильтра, то можно искать бинарным поиском по юзерам. И будет A * log N
Viktor
Пример можешь?
На литкоде не видел, но такую давали на фонскрине в Фейсбуке
Bartsev
И так по каждому юзеру
Viktor
Я беру юзера и пробираюсь по всем ключам
Представь берёшь фильтр и бежишь бинарным поиском по индексу для этого фильтра и сразу находишь юзера. И так для каждого фильтра.
Viktor
Тогда сперва надо индексы построить, т.е. юзеры должны быть отсортированы и так для каждого фильтра.
Viktor
Заранее.
Viktor
Объектики по ссылке хранятся, так что как раз удобно эти индексы хранить с точки зрения памяти.
Alexandr
в сегодняшней follow up — сделать за один проход так вот for (i = 0; i < n/2; i++) { ... } for (i = n/2; i < n; i++) { ... } это один проход? 🤔
Порридж В Ко-ливинге
Alexandr
Там вроде изначально же одним проходом делается. Slow fast указатели
ну вот у меня сначала fast идет от 0 до n, а дальше slow и fast до конца fast, то есть это все-таки 2 цикла, но при этом fast только раз проходит каждый элемент
Alexandr
slow fast не так работают
угу, в моем решении, это просто два указателя var removeNthFromEnd = function(head, n) { let slow = head; let fast = head; for (let i = 0; i < n; i++) { fast = fast.next; } if (!fast) { return head.next; } while (fast.next) { fast = fast.next; slow = slow.next; } slow.next = slow.next.next; return head; }; вот это 1 проход или 2?
Lynn «Кофеман»
return elem[filArr[i]] && elem[filArr[i]] === usersFilter[filArr[i]]; вот эта строчка внутри цикла убивает весь смысл цикла.
Lynn «Кофеман»
Вообще, если в цикле есть return без if то это 99% логическая ошибка
Alexandr
1 вы же один раз до конца дошли
да пасиб, просто хотел убедиться, что так же это понимаю :)
mrFix
Всем привет. Я как всегда с вопросом не по теме решения задачек. Но уж очень гложет любопытство. Вопрос банален, ответ гуглил, но так и не ясно. Вопрос про node.js: Можно ли дописывать в json файл без чтения/парсинга/перезаписи? Приму в дар любую инфу как это сделать или почему этот метод не актуален. Спасибо
mrFix
Я ради любопытства пробовал appendFile и писал, и все потом хорошо считалось. Но вот нигде нет использования такого метода, везде "читай, парсь, добавляй, перезаписывай"
Lynn «Кофеман»
Не могло оно хорошо считаться. Код в студию
Lynn «Кофеман»
Если мы говорим про объект, то как минимум надо удалить последнюю фигурную скобку вставить запятую, новые данные и новую скобку. Т.е. технически можно не читать/парсить всё, но в общем случае можно получить невалидный json
mrFix
Да все топорно😂 AppendFileSync("main.json", "[") AppendFileSync("main.json", JSON.stringify(obj)) AppendFileSync("main.json", "]")
Ilia
сделать из объект массив?
mrFix
Ну да, мне надо массив обьектов
Ilia
но зачем?
Lynn «Кофеман»
Да все топорно😂 AppendFileSync("main.json", "[") AppendFileSync("main.json", JSON.stringify(obj)) AppendFileSync("main.json", "]")
А, ну такая тривиальщина неинтересна. Ты попробуй так добавить в существующий файл
mrFix
Я даже оставлял весячую запятую в json файле и потом дописывал
mrFix
Ну вот я и спросил, есть ли способ и надо ли оно вообще
mrFix
Просто если нода жонглирует json файлами в несколько тысяч объектов как делать нечего, то тогда есесно не надо.
mrFix
но зачем?
Парсинг
Lynn «Кофеман»
Я даже оставлял весячую запятую в json файле и потом дописывал
Промежуточные невалидные результаты никого не волнуют. Я имею в виду что вот у тебя есть файл с содержимым {"a":1} что ты будешь делать что бы получился файл {"a":1,"b":2} ?
mrFix
А, ну такая тривиальщина неинтересна. Ты попробуй так добавить в существующий файл
Ну, как бы если изначально, ты пишешь как тебе надо и оставляешь "лазейку" для добавления.
Lynn «Кофеман»
Тогда при чём тут парсинг? Я думал мы говорим о дописывании новых данных в уже *существующий* *валидный* файл
Ilia
Парсинг
я понимаю что парсинг, я не понимаю зачем объект превращать в массив? или у тебя куча объектов, которые нужно объединить в массив?
Lynn «Кофеман»
Если ты про создание файла с нуля, то да, можно не создавать массив на 100500 элементов, писать 100500 раз по одному (например если элементы генерируются каким-то образом)
Viktor
Тз такое, на выходе массив объектов файле json
если эти объекты уже в памяти, точно этот самопальный JSON.stringify будет быстрее?
Viktor
потому что сейчас выходит, что экономия только на стрингифае массива вокруг что ли?
Viktor
ну такое себе
mrFix
У меня задача такова: парсинг, запись в json. Объекты приходят пачкой по примерно 50 шт. Или можно вообще по одному. На выходе json с [{},{},{}]
Lynn «Кофеман»
Ну экономия будет на охрененной строке в которую сериализуется 100500 объектов разом.
mrFix
Допустим, надо до 10000 обьектов записать
Lynn «Кофеман»
Но по хорошему надо мерять и считать что важнее и что проще.
Viktor
У меня задача такова: парсинг, запись в json. Объекты приходят пачкой по примерно 50 шт. Или можно вообще по одному. На выходе json с [{},{},{}]
мне кажется трейд-офф здесь может быть не очевиден, потому что ты будешь дёргать 100500 раз JSON.stringify для каждого объекта vs один раз для массива со всеми объектами. кто его знает какие накладные расходы на сам JSON.stringify?
Viktor
любопытно померять, да.
mrFix
Это получается что проще все в памяти держать, складывать, а потом разово в json?
mrFix
Вот и я задумался, но к сожалению скилов по замеру не имею. Сори
Viktor
а тут так заранее никто и не скажет. надо яндекс.танк натравливать 😉
mrFix
А так сказать "на глаз" какой алгоритм посоветуете?😁
Viktor
экстрасенсов нет 😃 я бы советовал не выдумывать странного unless you have a good reason to, как говорится. потому что если рядом с этим кодом нет ссылки на воспроизводимые перфоманс-тесты, то странно.
Viktor
типа через полгода откроешь сам и подумаешь «но... зачем?»
mrFix
Это кстати задачка на собес, так что всем полезно будет