Первая задача решена не правильно, например для выражения "1+23*5+2" выдает 31, когда правильный ответ 118. Накидал более читаемое как по мне решение : public static int calculate(String exp) { int result = 0; for (String byPlus : exp.split("\\+")) { if (byPlus.contains("*")) { int blockResult = 1; for (String s : byPlus.split("\\*")) { blockResult *= Integer.parseInt(s); } result += blockResult; } else { result += Integer.parseInt(byPlus); } } return result; }
toCharArray() Returns: a newly allocated character array whose length is the length of this string and whose contents are initialized to contain the character sequence represented by this string. так что по памяти все-таки O(n) получилось
Интересно Вас было слушать. Но задачи по парсингу строк - выражений обычно решаются через стек.... Это быстро , надежно, легко масштабируется... Задачка стандартная, хотя знать ее решение нету смысла, так как подобные вещи уже давно формализованы. Алгоритм классический называется ОПЗ(обратная польская запись). Эти штуки давно в обычных калькуляторах работают... Желаю Вам всего наилучшего
спасибо за разбор, а почему O(1) по памяти? там же три новые переменные, а если будет их больше, то это все таки память дополнительная или я неправильно понимаю?
@@dmitrybarzha3945 в этом у меня и загвоздка, допустим я строку с миллионом символов такую создал, это же определённый объем памяти, но по прежнему пишем O(1)
@@Макс-ч7ъ7ы Это стандартные задачи, которые задают всем на алгоритмической секции. Также еще не понятно что значит "задача для senior'а", определение сложно дать
Так а где примеры работы кода? Да и способ решения первой задачи вообще детсад какой-то. А если попросят добавить скобки, или будут пробелы между символами? Что тогда? Писать простыню if-else? Хотя бы токенизацию и стек применили бы.
Примеров работы кода нет, показываю только решение. Задача была поставлена в таком виде и не подразумевалось, что будут добавляться скобки или новые типы операций. Я решал так, как была поставлена задача и не пытался ничего додумать
Забирай бесплатные материалы от меня по изучению Java и подготовки к собеседованиям: t.me/JavaLearnBot?start=c1724626210163-41-ds
Все супер) Жду новых видео по Java)
Спасибо за поддержку)
я вот недавно начал изучать Джава. Начал с ООП, Интересный язык конечно! Спасибо тебя за контент. Жду от тебя следующих видео про решение таких задач!
Когда прочитал решение на литкоде, не понял, но видео запилил.
Первая задача вообще решена не правильно (порядок операций будет не верный)
Первая задача решена не правильно, например для выражения "1+23*5+2" выдает 31, когда правильный ответ 118.
Накидал более читаемое как по мне решение :
public static int calculate(String exp) {
int result = 0;
for (String byPlus : exp.split("\\+")) {
if (byPlus.contains("*")) {
int blockResult = 1;
for (String s : byPlus.split("\\*")) {
blockResult *= Integer.parseInt(s);
}
result += blockResult;
} else {
result += Integer.parseInt(byPlus);
}
}
return result;
}
Спасибо за видео
Майка классная❤
public int calculate(String exp) {
return stream(exp.split("\\+"))
.map(it -> stream(it.split("\\*"))
.mapToInt(Integer::parseInt)
.reduce(1, (a, b) -> a * b))
.mapToInt(it -> it)
.sum();
}
А что, так можно было что-ли?!?😲 Вы - гений!
toCharArray() Returns:
a newly allocated character array whose length is the length of this string and whose contents are initialized to contain the character sequence represented by this string.
так что по памяти все-таки O(n) получилось
В принципе да) Но по сути можно заменить на обычный обход строки, алгоритм не изменится
Мне понравилось видео, все понятно объясняешь, будет круто, если микро будет лучше, а то сильно приходится выкручивать звук, плохо слышно =/
Интересно Вас было слушать. Но задачи по парсингу строк - выражений обычно решаются через стек.... Это быстро , надежно, легко масштабируется... Задачка стандартная, хотя знать ее решение нету смысла, так как подобные вещи уже давно формализованы. Алгоритм классический называется ОПЗ(обратная польская запись). Эти штуки давно в обычных калькуляторах работают... Желаю Вам всего наилучшего
И посоветуй как систематизировать понимание деревьев в принципе, что лучше Лафоре или Седжвик?
Решать больше задач на графы, изучать теорию. У меня было видео про алгоритмы, можно посмотреть его.
решил первое через стек,сижу довольный, потом увидел О(1) по памяти 8-(
спасибо за разбор, а почему O(1) по памяти? там же три новые переменные, а если будет их больше, то это все таки память дополнительная или я неправильно понимаю?
O(1) потому что переменные константы и не зависит от длины аргументов
@@MuradMatnazarov-fj1cq почему константы? там final не стоит
не сами переменные константы, а их количество. Их три, и будь там строка хоть из десяти символов, хоть из миллиона, переменных так и будет три
@@dmitrybarzha3945 в этом у меня и загвоздка, допустим я строку с миллионом символов такую создал, это же определённый объем памяти, но по прежнему пишем O(1)
2-ая задача содержит ошибку: если подать на вход дерево: new TreeNode(1,
new TreeNode(8, new TreeNode(2), new TreeNode(4)), null);
// 1
// / \
// 8
// / \
// 2 4
Правильный ответ будет 15, а, приведенное решение, выдаст 14
Исправление:
Строка 111:
заменить: return Math.max(Math.max(maxL, maxR) + root.val, 0);
на: return Math.max(Math.max(maxL, Math.max(maxR, maxR + maxL)) + root.val, 0);
-----------------------------------------------------
В общем, классное видео, интересно рассказываешь. Спасибо! :)
Спасибо за обратную связь)
В примере, который вы прислали, будет правильный ответ 14, а не 15. Путь не может проходить по двум ребрам дерева два раза
Задачу на граф видел в видео интервью в фейсбук.
Спасибо за видео! Ты на Junior проходил?
Спасибо за обратную связь. Проходил на позицию Senior
@@sorokinpavelто есть это задачки для senior -а?)
@@Макс-ч7ъ7ы Это стандартные задачи, которые задают всем на алгоритмической секции. Также еще не понятно что значит "задача для senior'а", определение сложно дать
@@Макс-ч7ъ7ы порой даже сортировку пузырьком сложно решить, когда на твои действия смотрят
сколько лет уже занимаешься джава разработкой?
чтоб пройти яндекс на позицию сеньйора?
топ)
Спасибо)
Ты в Яндекс Маркете?
Я не работаю в Яндексе
для второй задачи, твое решение не корректное если все значения будут отрицательные ты просто вернешь 0
Нет, все корректно отработает, можно запустить и проверить
Контент топ, но вторая задача чето хард либо я слабый пока
Спасибо за филбек) У второй задачи просто тематика така - деревья. Если решать задачи на такую тему, то со временем легче будет)
Спасибо!
Рад, что было полезно!
Так а где примеры работы кода? Да и способ решения первой задачи вообще детсад какой-то. А если попросят добавить скобки, или будут пробелы между символами? Что тогда? Писать простыню if-else? Хотя бы токенизацию и стек применили бы.
Примеров работы кода нет, показываю только решение. Задача была поставлена в таком виде и не подразумевалось, что будут добавляться скобки или новые типы операций. Я решал так, как была поставлена задача и не пытался ничего додумать
Ограничение по памяти О(1), о каком стеке речь. Ты не понял задачу, а уже успел наехать)
Это алгоритмическая секция, а не архитектурная. Тут как дали задание, так и решай, главное в ограничения влезь и не грузи мозги ни себе не людям.