Viktor
Это красный флаг, я наверное не понятно выразился просто
Порридж В Ко-ливинге
Ок
Порридж В Ко-ливинге
Viktor
Вывод — самое главное говорить
Порридж В Ко-ливинге
Не прошел или подозрительно
Viktor
Я не понимаю что значит красный флаг
Красный флаг это когда интервьюер получает «сигнал, что возможно кандидат обманывает или не понимает основ»
Viktor
Он пишет это в отзыве и это, обычно, значит отказ даже если другие секции были норм
Viktor
Грубо говоря «красный флаг, стоп, дальше попускать нельзя»
Viktor
Не всегда именно так радикально, но вообще это такое выражение “red flag”, значит получен отрицательный сигнал
Порридж В Ко-ливинге
((9(
Порридж В Ко-ливинге
@vitkarpov А раскроте тайну массонской Ложи, как часто используются деревья в проде? 😆
Порридж В Ко-ливинге
А то я вот их всех прорешал (Easy), но где их использовать, кроме как БД не представляю
Порридж В Ко-ливинге
У того же BST кроме как того, что его ноды можно по диску разбросать, я преимуществ не вижу
Viktor
@vitkarpov А раскроте тайну массонской Ложи, как часто используются деревья в проде? 😆
используются постоянно. но если ты сам начал писать дерево — ты что-то делаешь не так. все стандартные задачи со стандартными алгоритмами уже решены, протестированы, все баги найдены и починены.
Viktor
Если ты спрашиваешь где это реально используется, например, поисковые индексы это деревья.
Viktor
Т.е. зависит от того что ты разрабатываешь.
Порридж В Ко-ливинге
Ок, все таки используется
Viktor
Не, разумеется используется. Просто «под капотом».
Viktor
Каждый день писать деревья с нуля это не ок.
V
Очередь с приоритетом 🤷‍♂
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Кстати, про рекурсию
Порридж В Ко-ливинге
https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/
Порридж В Ко-ливинге
Выглядит страшно, я даже замер на 5-10 минут
Порридж В Ко-ливинге
Но рекурсивно быглядит смешно: class Solution: def sortedArrayToBST(self, nums: List[int]) -> TreeNode: mid = len(nums) // 2 return TreeNode(nums[mid], self.sortedArrayToBST(nums[:mid]), self.sortedArrayToBST(nums[mid+1:])) if nums else None
Порридж В Ко-ливинге
Да, не одна линия, простоте 😆
Порридж В Ко-ливинге
@vitkarpov вопросик
Порридж В Ко-ливинге
Вот есть задача типо ДПшка
Порридж В Ко-ливинге
https://leetcode.com/problems/climbing-stairs/
Порридж В Ко-ливинге
А я вот умный-гений-математик скажу что я вижу тут формулу комбинаторики и могу решить просто формулой
Viktor
Если он может обьяснить как он получил эту формулу интервьюеру как будто тому 5 лет — надо срочно брать на работу 😊
Viktor
Ну это мое личное мнение
Viktor
Не представляю мнение компании ни каким образом (с)
Viktor
Если ближе к реальности, я могу представить, что интервьюер просто даст другую задачу.
Viktor
А эту пометит как плюс.
Viktor
Типа чувак крутой, умеет в математику, но одного этого сигнала недостаточно. Надо проверить, что ещё и код пишет
Порридж В Ко-ливинге
А, ок)
Порридж В Ко-ливинге
@vitkarpov А факториал числа можно считать константой или нет?
Порридж В Ко-ливинге
Я вот зашел в исходники питона, а там оно вообще оптимизированной рекурсией считается как-то 🤣🤣🤣
Порридж В Ко-ливинге
Порридж В Ко-ливинге
В общем зависит от числа
Viktor
Реально нагенерить в исходный код один раз конскую таблицу и положить навеки
Viktor
И никто факториалы больше 20 не считает 😆
Порридж В Ко-ливинге
Только это в Питоне не прокатит
Порридж В Ко-ливинге
В Питоне у чисел нет придела
Порридж В Ко-ливинге
А сам офигел
Порридж В Ко-ливинге
Для плюсов и ему подобных – прокатит
Порридж В Ко-ливинге
int climbStairs(int n) { n++; double root5 = pow(5, 0.5); double result = 1/root5*( pow((1+root5)/2, n) - pow((1-root5)/2, n) ); return (int)(result); }
Порридж В Ко-ливинге
int climbStairs(int n) { n++; double root5 = pow(5, 0.5); double result = 1/root5*( pow((1+root5)/2, n) - pow((1-root5)/2, n) ); return (int)(result); }
Что-то мне подсказывает, что такое решение интервьюера не обрадуте 🤣
Порридж В Ко-ливинге
Придется провести ему лекцию про числа фибоначи и золотое сечение 😄
Viktor
Придётся такое решение на матлабе решать 😉
Viktor
А потом на латехе ещё доклад написать, и оставить интервьюеру впридачу
Порридж В Ко-ливинге
Получить от рекрутора переадресацию в датасаентисты 🤣
Viktor
Или в прокуренное НИИ 😄
Порридж В Ко-ливинге
Порридж В Ко-ливинге
В ШАД 😃
Viktor
Да, согласен — так лучше.
Viktor
А после шада можно и в нии
Порридж В Ко-ливинге
Было: class Solution: def rob(self, nums: List[int]) -> int: sums = [0, 0] for i in range(len(nums)): n = nums[i] if i > 2: sums[i % 2] = max(sums[(i + 1)% 2] - nums[i - 1] + n, sums[i % 2] + n) else: sums[i % 2] += n return max(sums[0], sums[1]) Стало: class Solution: def rob(self, nums: List[int]) -> int: sum1 = sum2 = prev = 0 for n in nums: sum1 = max(sum2 - prev + n, sum1 + n) sum1, sum2 = sum2, sum1 prev = n return max(sum1, sum2)
Порридж В Ко-ливинге
Первый вариант на самом деле выглядит как будто “уберите лишнее”
Порридж В Ко-ливинге
Порридж В Ко-ливинге
🤣🤣🤣🤣🤣
Порридж В Ко-ливинге
Походу группу уже в мут кинули из-за меня 😆
Порридж В Ко-ливинге
Меня очень забавляет тот факт, что люди из Sun Microsystems Ждали 11 лет, чтобы добавить 4 строчки для оптимизации интов и переименовать ОДНУ переменную s на ss… https://web.archive.org/web/19970415204257/http://www.netlib.org/fdlibm/e_pow.c https://web.archive.org/web/20170308041834/http://www.netlib.org/fdlibm/e_pow.c
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Порридж В Ко-ливинге
11 лет чтобы поменять s на ss 🤣🤣🤣 Наверное там такой же псих как и я сидит
Oleg
Не спится?)
Порридж В Ко-ливинге
Не спится?)
Быает такое 😆
Null
Happy Monday! 👋 На этой неделе разберём сериализацию и десериализацию дерева. Хорошая задача на рекурсию, и довольно популярная на собеседованиях. Я сам получал её один раз. Ещё и про сериализацию в целом можно поговорить. https://vitkarpov.me/posts/serialize-and-deserialize-binary-tree/
Viktor
11 лет чтобы поменять s на ss 🤣🤣🤣 Наверное там такой же псих как и я сидит
отличный софт же, если всё работало и ничего не менялось 😄
Viktor
Ей, я вчера это делал)
Как фолоу-ап в этой задаче можно поговорить про разные варианты обхода дерева: inorder, preorder и т.д. и где они используются. Я писал в другой статье.
V
@vitkarpov Раз встречал на собесе такое задание, то скажи пожалуйста: спрашивали ли что делать, если значение в узле совпадает со спецсимволом разделителя/нуля?
Viktor
Да, ограничения на возможные значения узлов нужно уточнять заранее, это хорошее замечание. На литкоде в этой задаче сказано, что это положительные числа до какого-то N. В принципе, можно было здесь взять -1 в качестве спецсимвола.
Порридж В Ко-ливинге
отличный софт же, если всё работало и ничего не менялось 😄
Ну да, все ЯПы используют pow под капотом, но зачем было переменную переимановывать 🤣