Порридж В Ко-ливинге
Красота.
Вообще понятно? Надо по хорошему ребят спрашивать из чата, у которых нет 300+ нарешенных 😆, но они почему-то редко отписываются
Slava
почему в этом примере начинается с 8, а не с 1?
Sergei
Viktor
Slava
понял, спасибо)
Порридж В Ко-ливинге
Viktor
я конечно понимаю, что просят O(1) по памяти, но очень лениво это писать когда просто можно сложить все в сет 😃
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Правда код немножко улучшил, но это мелочи
Dida
Интересно, в чем сакральная суть Бесконечного отеля? То есть в чем суть вот этих всех перемещений постояльцев на номер+1? Не легче ли сделать вставку в конец списка (последний постоялец)+1?
Viktor
Viktor
там по-моему суть не в этих перемещениях, они просто нужны чтобы проиллюстрировать, что когда речь идёт о бесконечностях, то обычные сравнения к которым мы привыкли а-ля «количество комнат с нечетными номерами всегда меньше общего количества комнат» теряют смысл.
Viktor
к чему этот вопрос вообще? ты какую книгу читаешь? 😃
Dida
Я сейчас читаю "Практика реактивного программирования в Spring 5". И почему-то в голове начал крутиться этот парадокс бесконечного отеля.
Viktor
Dida
Viktor
Viktor
пример с заселением гостя мне как раз тоже кажется странным, в том смысле, что ничего удивительного в этом нет — ну бесконечное количество комнат, понятное, что ты всегда найдёшь себе ещё одну. А вот когда тебе надо поселить бесконечное количество посетителей и для этого надо освободить бесконечное количество комнат, и в одной бесконечности у тебя находится место для другой бесконечности... вот это уже нормально так мозг ломает.
Viktor
то есть ты их как бы сравнить не можешь, и это непривычно для нашего мозга, мы все же живём в мире счетных и конечных множеств.
Viktor
и привыкает к этому с детства.
Viktor
... а потом ты поступаешь на мехмат и твой мир медленно рушится у тебя на глазах 😂
Dida
Да, в этом ракурсе, конечно, невероятный парадокс. Спасибо за разъяснения)))
Viktor
Если есть желание прыгнуть в кроличью нору, рекомендую классику https://en.wikipedia.org/wiki/What_Is_Mathematics%3F
Dida
😁👍
Roman
В сегодняшней задаче неоптимальное решение лежит недалеко от оптимального)
В неоптимальном можно бежать по одним и тем же листам K раз, пока не пересекуться, то есть
cur1 = cur1 ? cur1.next : head1
cur2 = cur2 ? cur2.next : head2
А в оптимальном головы надо менять местами, когда дошли до конца)
Порридж В Ко-ливинге
Вот это я называю упоролся:
https://github.com/mame/quine-relay
Порридж В Ко-ливинге
Кто не понял, этот код производит аутпутом код другого языка, который производит код еще другого языка и т.д., а в конце он возвращается в первый код
Alex Azarov
Свифта нет(
Evgeniy
Порридж В Ко-ливинге
Evgeniy
Порридж В Ко-ливинге
Как?
Ну это вроде не совсем один проход, но один while loop
https://leetcode.com/problems/intersection-of-two-linked-lists/discuss/1092935/Python-Short-but-difficult-solution-explained
Evgeniy
Порридж В Ко-ливинге
Решил идти от обратного, делать не ИЗИ, а ХАРД решения для ПРО:
https://leetcode.com/problems/average-of-levels-in-binary-tree/discuss/1094418/Python-short-tricky-solution-for-pros-explained
Viktor
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Viktor
то, как работает BFS, ещё знать надо.
Viktor
но вообще поэтому для тренировки и полезно его написать.
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Ладно, щас пример распишу
Viktor
хотя на собесе мне было б интересно знает ли кандидат «как работает BFS».
Порридж В Ко-ливинге
Viktor
Viktor
просто потому что с BFS сталкиваться где-то кроме литкода не приходится 😂
Viktor
Хотя решение через BFS мне нравится. Написал оба 🙂
Viktor
https://gist.github.com/vitkarpov/54c7f35cfce3b822cf57ad8500871d92
Порридж В Ко-ливинге
Alex Azarov
Добби свободен, коллеги реально носок подарили
Viktor
Viktor
поздравляю 🙂
Viktor
в добрый путь, как говорится.
Viktor
https://www.instagram.com/p/BprbSnKFRW4/?igshid=1z2hthszzh0j
Viktor
помню этот день у себя. такой день бывает только раз 😊
Viktor
птенец выпархнул из уютного гнезда 😃
Viktor
Viktor
Задача классная, надо разбор делать.
Viktor
var findAllConcatenatedWordsInADict = function(words) {
const trie = new Trie();
function dfs(word, start, chainLen) {
if (word.length == start) {
// нужно убедиться, что нашли больше чем одно слово в цепочке
return chainLen > 1;
}
let curr = trie.root;
for (let i = start; i < word.length; i++) {
curr = curr.get(word[i]);
// если в дереве нет следующем буквы,
// значит нет ни одного слова для продолжения
if (!curr) {
return false;
}
// если это лист, надо попборовать снова поискать все дерево
// в поиске следующих слов, только отрезав уже найденный «префикс»
if (curr.isLeaf && dfs(word, i + 1, chainLen + 1)) {
return true;
}
}
return false;
}
const result = [];
// оптимизация, которая позволит
// исключить TLE для кейса с общими префиксами:
// a, aa, aaa, aaaa, aaaaa, ...
// имеет смысл добавлять слова в трай постепенно,
// т.к. в любом случае маленькие слова нельзя побить большими,
// соответственно и в дереве они раньше времени не нужны
words.sort((a, b) => a.length - b.length);
words.forEach((word) => {
if (dfs(word, 0, 0)) {
result.push(word);
} else {
trie.add(word);
}
});
return result;
};
class Trie {
root = new Node("")
add(word) {
let curr = this.root;
for (let i = 0; i < word.length; i++) {
curr = curr.add(word[i]);
}
curr.isLeaf = true;
}
}
class Node {
isLeaf = false;
children = new Array(26);
constructor(val) {
this.val = val;
}
add(val) {
const idx = this.idx(val);
if (!this.children[idx]) {
this.children[idx] = new Node(val);
}
return this.children[idx];
}
get(val) {
return this.children[this.idx(val)];
}
idx(val) {
return val.charCodeAt(0) - 'a'.charCodeAt(0);
}
}
Viktor
В принципе. если исключить сам трай отсюда, то даже компактная получилась.
Evgeniy
Evgeniy
По времени нормально?
Viktor
Viktor
вроде норм
Evgeniy
Viktor
по крайней мере, проходит.
Viktor
я там отметил оптимизацию без которой не проходит.
Viktor
то есть все слова заранее в трай пихать нельзя.
Evgeniy
Evgeniy
А, нашел комментарий
Viktor
Почему? 🤔
а там есть кейс с a, aa, aaa, aaaa... и тогда этот dfs начинает зря искать просто как не в себя.
Viktor
ага.
Viktor
я сперва делал просто, потом этот кейс свалился.
Viktor
пришлось чутка оптимизировать.
Порридж В Ко-ливинге