Первая задача решена не правильно, например для выражения "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) получилось
@@Макс-ч7ъ7ы Это стандартные задачи, которые задают всем на алгоритмической секции. Также еще не понятно что значит "задача для senior'а", определение сложно дать
Интересно Вас было слушать. Но задачи по парсингу строк - выражений обычно решаются через стек.... Это быстро , надежно, легко масштабируется... Задачка стандартная, хотя знать ее решение нету смысла, так как подобные вещи уже давно формализованы. Алгоритм классический называется ОПЗ(обратная польская запись). Эти штуки давно в обычных калькуляторах работают... Желаю Вам всего наилучшего
спасибо за разбор, а почему O(1) по памяти? там же три новые переменные, а если будет их больше, то это все таки память дополнительная или я неправильно понимаю?
@@furybarzha в этом у меня и загвоздка, допустим я строку с миллионом символов такую создал, это же определённый объем памяти, но по прежнему пишем O(1)
Так а где примеры работы кода? Да и способ решения первой задачи вообще детсад какой-то. А если попросят добавить скобки, или будут пробелы между символами? Что тогда? Писать простыню if-else? Хотя бы токенизацию и стек применили бы.
Примеров работы кода нет, показываю только решение. Задача была поставлена в таком виде и не подразумевалось, что будут добавляться скобки или новые типы операций. Я решал так, как была поставлена задача и не пытался ничего додумать
Забирай бесплатные материалы от меня по изучению Java и подготовки к собеседованиям: t.me/JavaLearnBot?start=c1724626210163-41-ds
Все супер) Жду новых видео по Java)
Спасибо за поддержку)
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();
}
А что, так можно было что-ли?!?😲 Вы - гений!
я вот недавно начал изучать Джава. Начал с ООП, Интересный язык конечно! Спасибо тебя за контент. Жду от тебя следующих видео про решение таких задач!
Когда прочитал решение на литкоде, не понял, но видео запилил.
Первая задача вообще решена не правильно (порядок операций будет не верный)
Спасибо!
Рад, что было полезно!
Первая задача решена не правильно, например для выражения "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) получилось
В принципе да) Но по сути можно заменить на обычный обход строки, алгоритм не изменится
Спасибо за видео
Задачу на граф видел в видео интервью в фейсбук.
И посоветуй как систематизировать понимание деревьев в принципе, что лучше Лафоре или Седжвик?
Решать больше задач на графы, изучать теорию. У меня было видео про алгоритмы, можно посмотреть его.
Майка классная❤
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. Путь не может проходить по двум ребрам дерева два раза
решил первое через стек,сижу довольный, потом увидел О(1) по памяти 8-(
Спасибо за видео! Ты на Junior проходил?
Спасибо за обратную связь. Проходил на позицию Senior
@@sorokinpavelто есть это задачки для senior -а?)
@@Макс-ч7ъ7ы Это стандартные задачи, которые задают всем на алгоритмической секции. Также еще не понятно что значит "задача для senior'а", определение сложно дать
@@Макс-ч7ъ7ы порой даже сортировку пузырьком сложно решить, когда на твои действия смотрят
Мне понравилось видео, все понятно объясняешь, будет круто, если микро будет лучше, а то сильно приходится выкручивать звук, плохо слышно =/
сколько лет уже занимаешься джава разработкой?
чтоб пройти яндекс на позицию сеньйора?
Интересно Вас было слушать. Но задачи по парсингу строк - выражений обычно решаются через стек.... Это быстро , надежно, легко масштабируется... Задачка стандартная, хотя знать ее решение нету смысла, так как подобные вещи уже давно формализованы. Алгоритм классический называется ОПЗ(обратная польская запись). Эти штуки давно в обычных калькуляторах работают... Желаю Вам всего наилучшего
Здравствуй!
Стек не подходит по условиям задачи. Требуется решить с константным потреблением памяти.
спасибо за разбор, а почему O(1) по памяти? там же три новые переменные, а если будет их больше, то это все таки память дополнительная или я неправильно понимаю?
O(1) потому что переменные константы и не зависит от длины аргументов
@@MuradMatnazarov-fj1cq почему константы? там final не стоит
не сами переменные константы, а их количество. Их три, и будь там строка хоть из десяти символов, хоть из миллиона, переменных так и будет три
@@furybarzha в этом у меня и загвоздка, допустим я строку с миллионом символов такую создал, это же определённый объем памяти, но по прежнему пишем O(1)
топ)
Спасибо)
Контент топ, но вторая задача чето хард либо я слабый пока
Спасибо за филбек) У второй задачи просто тематика така - деревья. Если решать задачи на такую тему, то со временем легче будет)
для второй задачи, твое решение не корректное если все значения будут отрицательные ты просто вернешь 0
Нет, все корректно отработает, можно запустить и проверить
Ты в Яндекс Маркете?
Я не работаю в Яндексе
Так а где примеры работы кода? Да и способ решения первой задачи вообще детсад какой-то. А если попросят добавить скобки, или будут пробелы между символами? Что тогда? Писать простыню if-else? Хотя бы токенизацию и стек применили бы.
Примеров работы кода нет, показываю только решение. Задача была поставлена в таком виде и не подразумевалось, что будут добавляться скобки или новые типы операций. Я решал так, как была поставлена задача и не пытался ничего додумать
Ограничение по памяти О(1), о каком стеке речь. Ты не понял задачу, а уже успел наехать)
Это алгоритмическая секция, а не архитектурная. Тут как дали задание, так и решай, главное в ограничения влезь и не грузи мозги ни себе не людям.