V
а сегодня первая проблема hard!
Порридж В Ко-ливинге
а сегодня первая проблема hard!
Рекурсией ломается?
Порридж В Ко-ливинге
И примеры неочень, не понятно, можно ли возвращаться по пройденному пути
Evgeniy
Сомневаюсь, иначе бы решения не было
Порридж В Ко-ливинге
Почему?
Evgeniy
При положительных узлах можно было бы гулять туда-сюда
Порридж В Ко-ливинге
Неет
Порридж В Ко-ливинге
Возвращаться, но не прибавлять значение
Порридж В Ко-ливинге
Ну, во 2 примере не выгодно идти через -10 -> 9, т.к. будет -1
Evgeniy
Понятно. Не, тут именно путь нужен
Порридж В Ко-ливинге
А если бы там было -10 -> 12, было бы выгодно
Порридж В Ко-ливинге
Понятно. Не, тут именно путь нужен
На я тоже думаю так, так логичнее
Evgeniy
Т.е. где-то начал и идёшь. До какого-то конечного пункта
Evgeniy
Назад не возвращаешься
Порридж В Ко-ливинге
А ты/вы уже решили?
Evgeniy
Нет, только прочитал условие
Порридж В Ко-ливинге
)
Evgeniy
Первая мысль пока что: inorder traversal
Evgeniy
максимальная сумма пути в левом поддереве, узле и правом поддереве
Evgeniy
и отдельно левое / правое поддерево. из них максимум
V
Рекурсией ломается?
да, ДП (если я правильно понимаю, что такое ДП, а что рекурсия, ахаха) прошло
V
странный хард. я бы сказал, что это медиум
Порридж В Ко-ливинге
Сейчас доем и попробую с ноги в лоб
Порридж В Ко-ливинге
Как я понял, надо просто схлопнуть дерево
V
все-таки, от харда я ожидаю более сложны структур данных, вроде max/min heap и их комбинаций
Viktor
что-то я не понял. кто-нибудь может объяснить, почему здесь правильный ответ 16, а не 15.
Порридж В Ко-ливинге
6 + 9 + -3 + 2 + 2
Viktor
ага, т.е не обязательно идти до конца дерева чтобы собрать целый путь
Порридж В Ко-ливинге
Да
Viktor
и это по-вашему не хард? 😄
Viktor
ладно, ладно 🙂
Viktor
ещё порешаю
Порридж В Ко-ливинге
Кто-нибудь может объеснить зачем нужна pair?
Порридж В Ко-ливинге
На стаке только о плюсах и минусах говорят, а зачем нужна нет
Порридж В Ко-ливинге
Можно же вектор или массив из 2 элементов сделать,
Evgeniy
Postorder прошёл в итоге
Evgeniy
без лишних методов, проверок
Порридж В Ко-ливинге
Легковеснее int[2] ?
Evgeniy
А у пары есть какие-то свойства?
Порридж В Ко-ливинге
Да
Evgeniy
Легковеснее int[2] ?
Ну, допустим, для удобства тогда
Порридж В Ко-ливинге
first, second, =, swap
Evgeniy
То ты пишешь индексы, а то вот эти слова
Evgeniy
"выше уровень абстракции", если говорить умными словами
Порридж В Ко-ливинге
Ну пока 0 за
Порридж В Ко-ливинге
@vitkarpov Ждем экперта
Evgeniy
Ну пока 0 за
Этого мало разве?
Порридж В Ко-ливинге
Я догадываюсь
Порридж В Ко-ливинге
Для удобства скорее всего, но я хочу от плюсовика усляшать почему
Evgeniy
В шарпах такое тоже есть
Viktor
Можно же вектор или массив из 2 элементов сделать,
Как сделать массив или вектор из двух разных типов?
Порридж В Ко-ливинге
Порридж В Ко-ливинге
НУ тогда struct
Viktor
Это собственно его цель
Порридж В Ко-ливинге
Хотя каждый раз структуру делать
Порридж В Ко-ливинге
Надоест
Viktor
Struct норм, но у pair например сразу определены операторы сравнения
Viktor
И можно ту же точку из двух координат легко в мап или сет положить
Evgeniy
Для ключа можно использовать, да
Viktor
Чуть удобнее чем у структуры определять оператор сравнения. С другой стороны, я все равно делаю Point, чтобы читать поля с понятными названиями, а не first и second
Evgeniy
В шарпах не так давно появилась возможность задавать названия этим полям. Только там это Item1 и Item2
Evgeniy
по умолчанию
Viktor
С С++17 стандарта можно деструктуризацию делать, как в JS, так что тоже удобно
Viktor
Я отказался от структуры Point в таком случае :-)
Evgeniy
например, (string Name, int Count) user = ("Вася", 5);
Viktor
Собственно все ассоциативные контейнеры хранят именно pair. Это можно заметить если итерироваться - там first и second. А сделано это как раз потому что надо объединить два разных типа.
Viktor
Можно и больше объединять - тогда есть tuple
Evgeniy
Аналогично и шарп
Evgeniy
Есть Tuple и ValueTuple
Evgeniy
@vtambourine а как ты через ДП сделал сегодняшнюю задачу?
V
https://github.com/vtambourine/leetcode-go/blob/master/0124.binary_tree_maximum_path_sum/binary_tree_maximum_path_sum.go
Evgeniy
У меня так же, но без дополнительной функции максимума. И выходит излишне громозко
Evgeniy
https://leetcode.com/problems/binary-tree-maximum-path-sum/discuss/603039/C-simple-recursive-postorder-DFS-solution
V
не уверен. DFS подразумевает стек, а не рекурсивный вызов
Evgeniy
не уверен. DFS подразумевает стек, а не рекурсивный вызов
Можно и рекурсивно, и итеративно. Просто разные реализации
V
окей, тогда я вообще не понимаю, что такое ДП...
Evgeniy
Решение бОльшей задачи, используя решения меньших задач.