програмерской точки зрения - упражнение полезное! с прикладной (трэйдерской) точки зрения - чюхня полнейшая )) главное в трэйдинге это сделать тот самый прогноз куда именно пойдёт цена )
Считаю, что для собеседований как раз и нужно использовать дикие и нереалистичные задачи, чтобы увидеть, как человек рассуждает над решением задачи. Реалистичные задачи могут решаться по аналогии с задачами из реального опыта, без анализа и оценки подводных камней.
Спасибо! Сначала решил с дополнительными проверками, а потом на 1:54 увидел подсвеченные участки графика и понял, что достаточно просто складывать прирост, для чего идеально подошел reduce!
Прикольная задачка, решил сразу, только чуть в другом исполнении. Взял в проверке prices[ i ] < prices[ i + 1], sum += prices[i + 1] - prices[i]. Побольше бы такого контента. Спасибо вам за ваш труд)
Спасибо за задачку! Вот так вышло, в этот раз скоростью) Runtime: 68 ms, faster than 97.01% of JavaScript online submissions for Best Time to Buy and Sell Stock II. Memory Usage: 40.5 MB, less than 20.45% of JavaScript online submissions for Best Time to Buy and Sell Stock II. var maxProfit = function(prices) { var profit = 0; for (let i = 0; i < prices.length - 1; i++) { if (prices[i + 1]
Я бы эту задачу назвал «Подсчет упущенной выгоды». Если представить, что это реальный курс акции публичной компании и это не будущее, а прошлое) Спасибо вам за ваши видео!
сначала так решил..., потом когда посмотрел ваше решение понял принцип который и в предыдущих задачах попадался: что мы можем что то посчитать отдельно для каждого элемента и потом просто все сложить, это как раз получается один проход по массиву а у меня для каждого текущего минимального значения происходит поиск следующего максимального по всему оставшемуся массиву в функции findMaxValue() - тоесть поиск значения которое может быть самым большим до падения акций... (именно это и усложнило весь алгоритм) const bestTime = (input) => { let min = input[0], max = null, maxProfit = 0 const findMaxValue = (index) => { let maxValue = input[index] for(let i = index; i < input.length; i++){ if(maxValue < input[i]){ maxValue = input[i] } else { break } } return maxValue } for(let i = 0; i < input.length; i++){ if(input[i] < input[i+1]){ min = Math.min(min, input[i]) } else if(input?.[i-1] < input[i]){ max = findMaxValue(i) maxProfit += max - min max = null min = input[i+1] } } return maxProfit }
let prices = [5, 1, 2, 3, 4, 7]. Профит 6 если купить во второй день по цене 1 и продать в последний по цене 7. Ваш алгоритм выдает профит 3. Сергей, я неправильно понял условие задачи?
Для массива, например [7, 1, 2, 1, 2, 9], максимальный profit = 8, но по алгоритму, который приведен в видео, мы получим 2 Это разве правильно? Наша же задача получить максимальный profit
По алгоритму відео ми отримаємо 9, що і є макс профітом, так як ми можемо купляти і продавати в один день (ти трохи прорахувався, продати можна два рази, на першій 2 та на 9). Я також думав, що так не можна, аж поки рішення не побачив.
Через forEach вот так сделал let price1 = [0, 7, 1, 5, 3, 6, 4] // 14 let price2 = [7, 6, 4, 3, 1] // 0 function merge(price) { let prev = price[0] let result = 0 price.forEach(element => { if (prev < element) { result = result + element - prev } prev = element }) return result } console.log(merge(price1))
Спасибо за Ваш контент, лайк) Ещё есть такой вариант более сложный, который мне пока не решить: Есть массив акций 7, 1, 5, 3, 6, 4 Чтобы получить максимальный профит нам нужно купить акции 1, 3 и продать по 6, тогда выгода будет 8 (6-1 + 6-3)
В этой задачке, мы не можем покупать и еще раз купить. Мы можем покупать/продавать или продавать/покупать. А если делать как вы, то можно купить на 5 и продать на 6 и получить один доп пункт
@@EvgeshaFromUa я думал, вдруг, тут захотят увидеть решение более сложной задачи, я решал в более сложном условии, не мог решить, когда писал этот коммент. Сейчас осенило, та задача, что была на видео мне была понятна, но спасибо, что объяснили ещё раз (вдруг я не понял)
Почему итерация цикла начали с 0? В первой итерации будет обращение по индексу -1. Да, в JS это не проблема, но в других ЯП за это "наказывают" очень сильно. К тому же, нет смысла начинать цикл с 0. Нужно начинать с 1. Поэтому, хорошо бы сделать проверку на в начале, что элементов в массиве должно быть как минимум 2.
Учитывая условие задачи, что в массиве всегда есть минимум один элемент - да действительно можно начинать было с индекса 1. Но я когда писал решение, предполагал что массив может быть пустым. И тут я сторонник более компактного решения и использования "силы" js. когда не нужно беспокоится о проблемах boundaries. Зачем писать доп строчку с проверкой на пустой массив если проверка if (4 > undefined) вернет всегда false. К счастью мы пишем не на других ЯП а именно на js :)
@@frontendscience Тут же дело не столько в boundaries, сколько в том, что не смысла начинать проверять с индекса 0. Мы всё равно должны проверить "текущий" и "предыдущий", а это уже подразумевает как минимум 1 и 0. Да, можно начать хоть с -100 - код тоже будет работать. Для меня как красная тряпка - "пишешь цикл по массиву - проверь себя на выход за пределы". На счет второй части моего вопроса про первый восходящий тренд - я там окзался не не прав. Я удалил это из комментария.
Очень странно, но ваш алгоритм только покупает дёшево и продает дороже на следующий день. А если точка выгодной продажи не в следующий день, а через несколько дней восходящего тренда?
Тут принимается допущение что алгоритм "знает" всю историю цен в будущем, поэтому несколько возрастающих трендов можно рассматривать как одну продажу. Конечно, данный алгоритм не имеет никакой связи с реальностью.
Где в решении указано что продажа происходит каждый день в случае выгоды? Алгоритм льшь считает эту самую выгоду за каждый день. К примеру у нас цена растет три дня подряд, мы покупаем акции в первый день и продаём на 3й. Предложенное решение корректно рассчитает нашу выгоду.
тут ограничение, что можно купить только 1 акцию? А если ввести начальную сумму, то что изменится? Из неочевидного - будут ли ситуации, когда выгодно купить не на всю оставшуюся сумму, а на часть? Похоже, что не будет. А если сделать еще ежедневное ограничение по количеству доступных для приобретения акций?
Не стоит ровнятся на мое мнение, я не выполнил тестовое для стажировки. Но все же. Беда таких задач в том, что ты смотришь на условия и думаешь. Так, если это акции, то надо бы выводить день, оба значения, самую большую разницу и тд. Мне в моем однопоточном мозгу не хватает воды чтобы понять что выводить на данного типа заданиях
Вот такая тестовая задача. На вход функции absentNumber подается массив с натуральными числами до n включительно, числа неупорядочены и каждое число встречается по одному разу, кроме одного, оно отсутствует, необходимо определить какое и вернуть его. Чтобы вычислительная сложность была O(n)
А якщо так: [8, 10, 8, 3, 5, 12, 11]? Питання, якщо ми в один день можемо здійснити одну дію (покупка/продаж), який буде профіт? Функція поверне 11, а якщо зважати на умову то тут профіт буде 4. Тобто рішення не відповідає умові "одна дія - один день". Чи я щось не правильно зрозумів?)
прикольно) практически тот же вариант, только сравнивал текущий айтем со следующим, то есть prices[i+1] > prices[i], получается что у тебя андефайнд сравнивается на первой итерации, а у меня на последней)
Мы не можем «докупать» - мы можем купить и после покупки пока не продадим не можем купить еще. Если не ошибаюсь такая задача тоже есть (с докупкой) думаю еще разберем ее
Если учесть условие на литкод, что массив всегда содержит хотя бы один элемент - то да, можно начать с i=1. Если массив может быть пустым, то лучше оставить i=0, чтобы не делать доп проверку на пустой массив.
const foundation = (nums) => { let sum = 0 nums.reduce((acc, cur) => { if (acc > cur) return acc = cur else { sum = sum + (cur - acc) return acc = cur } }) return sum }
Задачка простейшая. Но решить ее не смог, имея опыт решения много более сложных задач. Не уловил сразу ключевой момент - нужно всего лишь просуммировать отрезки между соседними днями с восходящим трендом. Печаль.
Я может не до конца понял условие. Но вроде же на массиве типа [1,3,6,9] этот алгоритм будет работать неправильно? Или будет третья часть, где в условиях будет возможность не продавать и не покупать акции, когда нам это не нужно?
Он будет работать корректно - так как мы можем продавать и покупать в один и тот де день. Покупать и продавать мы можем сколько угодно раз - нет ограничений. И да есть еще версии этой задачи когда нам надо посчитать профит с минимальным количеством покупок/продаж.
Можете мне помочь, что делать. Я начал учиться на пайтон бекенд разработчика. обучение 10 месяцев. прошло 2 месяца. и в один момент я просто не понимаю что вообще делать как решать задачи не могу выстроить алгоритм решений данной задачи. Я уже самый отстающий на потоке. И мотивации продолжать нет и желания что то делать тоже. Очень тяжело дается мне все это. Я порой сижу и думаю, может это действительно не мое. Что делать в такой ситуации??? Проблема наверное в основном в том что я не могу выстроить алгоритмическую цепочку как решать задачи. Полная каша в голове. Материал не усваивается тоже. Хотя пишу лекции и пересматриваю материал несколько раз. У нас есть разборы ДЗ я смотрю вроде все понятно как делают наставники, но я понимаю что я тупо копирую код и все. а сам не понимаю.
Привет, Арсений. Я не знаю, где Вы учитесь, но это вопрос явно к наставникам (менторам) и самой обучающей компании. Если Вы откровенно расскажете Вашим менторам текущую ситуацию, может быть это все изменит. По идее обучающие компании должны быть сильно заинтересованы в том, чтоб их студенты высоко перфомили. Где-то они не дорабатывают. Или может у Вас не тот подход, что они закладывали. Нужно с ними обсуждать. Но в любом случае повторять код за кем-то в самом начале - это правильно! Главное понимать принцип, алгоритм и то, что именно Вы пишете. Самостоятельные решения будут приходить только с практикой. Поначалу все копируют. Я тоже в комментах часто советую посмотреть видео с решением задачи. И попробовать воспроизвести код - чтоб хоть немного отложилось в памяти. Еще лучше через несколько недель попробовать вернуться к той же задаче и попробовать снова воспроизвести решение. Да, это требует труда. Но потом Вы даже не поймете, когда уже начали самостоятельно решать аналогичные задачи. И все благодаря Вашим тренировкам. Терпения Вам и успехов!
задача неправильно называется, в реальности, нужно решать, купить в 1 день по 7 или нет, а если в 4 день было бы 6, считался бы он лучшем временем для покупки? И в описании: "...прибыль, которую можно заработать..." - нужна машина времени, чтобы получить такой массив. В общем, задачка ради задачки
как-то слишком легко var maxProfit = function(prices) { let profit = 0 for (let i = 0; i < prices.length - 1; i++) { const element = prices[i]; const nextElement = prices[i + 1] if (element < nextElement) { profit += nextElement - element } } return profit };
Условие задачи абсолютно некорректное. Зачем впутывать сюда акции?! Если есть операция покупки в какой-то точке, то нужно заранее знать будут ли акции дороже, а вдруг далее только спад, можно ли продавать и покупать в одной точке и т.д.? Гораздо корректнее написать условие с использованием отрезков например. Leetcode часто грешит плохим описанием.
Сначала решил так, как у Автора. Потом вспомнил, что для получения результирующего значения массива есть метод reduce(). const profit = prices.reduce((acc, cur, index) => acc += (cur > prices[index-1]) ? cur - prices[index-1] : 0, 0);
Люблю такие задачи, которые кажутся сложными, но решаются в пару строчек кода. Спасибо за интересный контент.
Я сам обожаю такие задачи! Когда не понимаешь вначале как к ней подступить, а потом оказывается такое короткое решение :)
програмерской точки зрения - упражнение полезное!
с прикладной (трэйдерской) точки зрения - чюхня полнейшая )) главное в трэйдинге это сделать тот самый прогноз куда именно пойдёт цена )
Да, так и есть)))
Считаю, что для собеседований как раз и нужно использовать дикие и нереалистичные задачи, чтобы увидеть, как человек рассуждает над решением задачи. Реалистичные задачи могут решаться по аналогии с задачами из реального опыта, без анализа и оценки подводных камней.
Спасибо! Сначала решил с дополнительными проверками, а потом на 1:54 увидел подсвеченные участки графика и понял, что достаточно просто складывать прирост, для чего идеально подошел reduce!
Прикольная задачка, решил сразу, только чуть в другом исполнении.
Взял в проверке prices[ i ] < prices[ i + 1], sum += prices[i + 1] - prices[i].
Побольше бы такого контента. Спасибо вам за ваш труд)
Рады, что понравилось! Благодарим за поддержку!
Спасибо за задачку! Вот так вышло, в этот раз скоростью)
Runtime: 68 ms, faster than 97.01% of JavaScript online submissions for Best Time to Buy and Sell Stock II.
Memory Usage: 40.5 MB, less than 20.45% of JavaScript online submissions for Best Time to Buy and Sell Stock II.
var maxProfit = function(prices) {
var profit = 0;
for (let i = 0; i < prices.length - 1; i++) {
if (prices[i + 1]
Спасибо за задачу!
Решил через reduce:
const maxProfit = prices => prices.reduce((acc, curr, index, arr) => {
const profit = curr - arr[index - 1];
return acc + (profit > 0 ? profit : 0);
}, 0);
Спасибо, это полезный контент! Пожалуйста, не останавливайтесь.
Рад, что было полезно :)
Класс. Побольше таких решений. 👍👍👍
Супер. Ребята давайте попросим побольше таких задачек)
Я бы эту задачу назвал «Подсчет упущенной выгоды». Если представить, что это реальный курс акции публичной компании и это не будущее, а прошлое)
Спасибо вам за ваши видео!
Да, да)
И Вам спасибо!
сначала так решил..., потом когда посмотрел ваше решение понял принцип который и в предыдущих задачах попадался: что мы можем что то посчитать отдельно для каждого элемента и потом просто все сложить, это как раз получается один проход по массиву
а у меня для каждого текущего минимального значения происходит поиск следующего максимального по всему оставшемуся массиву в функции findMaxValue() -
тоесть поиск значения которое может быть самым большим до падения акций... (именно это и усложнило весь алгоритм)
const bestTime = (input) => {
let min = input[0], max = null, maxProfit = 0
const findMaxValue = (index) => {
let maxValue = input[index]
for(let i = index; i < input.length; i++){
if(maxValue < input[i]){
maxValue = input[i]
} else {
break
}
}
return maxValue
}
for(let i = 0; i < input.length; i++){
if(input[i] < input[i+1]){
min = Math.min(min, input[i])
} else if(input?.[i-1] < input[i]){
max = findMaxValue(i)
maxProfit += max - min
max = null
min = input[i+1]
}
}
return maxProfit
}
let prices = [5, 1, 2, 3, 4, 7]. Профит 6 если купить во второй день по цене 1 и продать в последний по цене 7. Ваш алгоритм выдает профит 3. Сергей, я неправильно понял условие задачи?
Вероятно, где-то допустили ошибку когда перепечатывали код. Мой код выдает 6 на таком входном массиве.
Привет, решается в одну строчку (если я правильно понял задачу):
array.reduce((sum, current, index, arr) => current > arr[index - 1] ? sum += current - arr[index - 1] : sum, 0)
отличный однострочник! Благодарю за решение
@@frontendscience "отличный", только если неистово любить превращать код в нечитабельный
тоже сначала так решил, но возвращал не сумму при невыполнении условия, потом переписал циклом)
"+=" тут не нужен, достаточно просто "+"
Решил самостоятельно точно также как в видео, только через i + 1, потом из комментов увидел reduce и вспомнил про него)
да, можно через reduce, так будет компактнее
Для массива, например [7, 1, 2, 1, 2, 9], максимальный profit = 8, но по алгоритму, который приведен в видео, мы получим 2
Это разве правильно?
Наша же задача получить максимальный profit
По алгоритму відео ми отримаємо 9, що і є макс профітом, так як ми можемо купляти і продавати в один день (ти трохи прорахувався, продати можна два рази, на першій 2 та на 9). Я також думав, що так не можна, аж поки рішення не побачив.
@@kotyaboko 為什麼用不同的語言回覆評論? 納粹
Спасибо большое!
Через forEach вот так сделал
let price1 = [0, 7, 1, 5, 3, 6, 4] // 14
let price2 = [7, 6, 4, 3, 1] // 0
function merge(price) {
let prev = price[0]
let result = 0
price.forEach(element => {
if (prev < element) {
result = result + element - prev
}
prev = element
})
return result
}
console.log(merge(price1))
Хотел сказал что у тебя оч хорошая картинка и выставки тоже на высоте, видно, что ты стараешься, хоть канал и нишевый я думаю просмотры увеличатся👍
Поставил два лайка с разных аккаунтов. Решение не стал кидать, так как решил примерно таким же образом. :))
Биг спасибо))
Спасибо за Ваш контент, лайк)
Ещё есть такой вариант более сложный, который мне пока не решить:
Есть массив акций 7, 1, 5, 3, 6, 4
Чтобы получить максимальный профит нам нужно купить акции 1, 3 и продать по 6, тогда выгода будет 8 (6-1 + 6-3)
В этой задачке, мы не можем покупать и еще раз купить. Мы можем покупать/продавать или продавать/покупать. А если делать как вы, то можно купить на 5 и продать на 6 и получить один доп пункт
@@EvgeshaFromUa я думал, вдруг, тут захотят увидеть решение более сложной задачи, я решал в более сложном условии, не мог решить, когда писал этот коммент. Сейчас осенило, та задача, что была на видео мне была понятна, но спасибо, что объяснили ещё раз (вдруг я не понял)
@@evgeniytimofeev6281 Полностью согласен, чем тяжелее в учение тем легче в бою!
Стоит просмотреть секунд 10 "Алгоритм решения" и сразу начинаю думать в нужном русле и получается решить задачу пусть и по своему
спасибо за полезную инф для новичков
Рады, что было полезно!
Почему итерация цикла начали с 0?
В первой итерации будет обращение по индексу -1. Да, в JS это не проблема, но в других ЯП за это "наказывают" очень сильно.
К тому же, нет смысла начинать цикл с 0. Нужно начинать с 1.
Поэтому, хорошо бы сделать проверку на в начале, что элементов в массиве должно быть как минимум 2.
Учитывая условие задачи, что в массиве всегда есть минимум один элемент - да действительно можно начинать было с индекса 1. Но я когда писал решение, предполагал что массив может быть пустым. И тут я сторонник более компактного решения и использования "силы" js. когда не нужно беспокоится о проблемах boundaries. Зачем писать доп строчку с проверкой на пустой массив если проверка if (4 > undefined) вернет всегда false. К счастью мы пишем не на других ЯП а именно на js :)
@@frontendscience Тут же дело не столько в boundaries, сколько в том, что не смысла начинать проверять с индекса 0. Мы всё равно должны проверить "текущий" и "предыдущий", а это уже подразумевает как минимум 1 и 0. Да, можно начать хоть с -100 - код тоже будет работать.
Для меня как красная тряпка - "пишешь цикл по массиву - проверь себя на выход за пределы".
На счет второй части моего вопроса про первый восходящий тренд - я там окзался не не прав. Я удалил это из комментария.
Можете, пожалуйста, снять отдельное видео про оценку сложности алгоритмов? Или такое видео уже есть на канале?
Приятного просмотра: ruclips.net/video/Fu4BzQNN0Qs/видео.html :)
Сделай побольше таких видео!)
Стараюсь)
классно побольше такой контент
Очень странно, но ваш алгоритм только покупает дёшево и продает дороже на следующий день. А если точка выгодной продажи не в следующий день, а через несколько дней восходящего тренда?
Тут принимается допущение что алгоритм "знает" всю историю цен в будущем, поэтому несколько возрастающих трендов можно рассматривать как одну продажу. Конечно, данный алгоритм не имеет никакой связи с реальностью.
Где в решении указано что продажа происходит каждый день в случае выгоды? Алгоритм льшь считает эту самую выгоду за каждый день. К примеру у нас цена растет три дня подряд, мы покупаем акции в первый день и продаём на 3й. Предложенное решение корректно рассчитает нашу выгоду.
тут ограничение, что можно купить только 1 акцию? А если ввести начальную сумму, то что изменится? Из неочевидного - будут ли ситуации, когда выгодно купить не на всю оставшуюся сумму, а на часть? Похоже, что не будет. А если сделать еще ежедневное ограничение по количеству доступных для приобретения акций?
Не стоит ровнятся на мое мнение, я не выполнил тестовое для стажировки. Но все же.
Беда таких задач в том, что ты смотришь на условия и думаешь. Так, если это акции, то надо бы выводить день, оба значения, самую большую разницу и тд.
Мне в моем однопоточном мозгу не хватает воды чтобы понять что выводить на данного типа заданиях
Ну да, решение такого типа задач требует умения абстрагироваться и решать только входные данные)
Вот такая тестовая задача.
На вход функции absentNumber подается массив с натуральными числами до n включительно, числа неупорядочены и каждое число встречается по одному разу, кроме одного, оно отсутствует, необходимо определить какое и вернуть его. Чтобы вычислительная сложность была O(n)
Классная задача. Я ее раньше давал на собеседованиях. Думаю сделаю отдельное видео с ней и ее более сложными вариациями
А якщо так: [8, 10, 8, 3, 5, 12, 11]?
Питання, якщо ми в один день можемо здійснити одну дію (покупка/продаж), який буде профіт?
Функція поверне 11, а якщо зважати на умову то тут профіт буде 4.
Тобто рішення не відповідає умові "одна дія - один день".
Чи я щось не правильно зрозумів?)
прикольно) практически тот же вариант, только сравнивал текущий айтем со следующим, то есть prices[i+1] > prices[i], получается что у тебя андефайнд сравнивается на первой итерации, а у меня на последней)
Но если купить на шагах 2,3,4 и продать всё на 5, то профита будет 9
Мы не можем «докупать» - мы можем купить и после покупки пока не продадим не можем купить еще. Если не ошибаюсь такая задача тоже есть (с докупкой) думаю еще разберем ее
@@frontendscience ну тогда всё ок:) А то в видео не услышал этих условий
@@lor1k говорил об этом на 1:00 )
А если начать цикл с i=1, то уменьшим кол-во итераций на 1 и добавим еще немного profit на экономии вычислительных мощностей)
Если учесть условие на литкод, что массив всегда содержит хотя бы один элемент - то да, можно начать с i=1. Если массив может быть пустым, то лучше оставить i=0, чтобы не делать доп проверку на пустой массив.
const foundation = (nums) => {
let sum = 0
nums.reduce((acc, cur) => {
if (acc > cur) return acc = cur
else {
sum = sum + (cur - acc)
return acc = cur
}
})
return sum
}
Благодарю за решение! Отличный компакнтый вариант! )
Смотрю код и не понимаю как отрабатывает первая итерация цикла, ведь там значение i буде отрицательным (-1).
Там нет отрицательного значения, там есть проверка, больше ли первый день, чем undefined. И эта проверка всегда будет возвращать false.
function exchangeCalc (arr){
let revenue = 0;
let indicator = true;
for(let i = 0;i
можно объяснение почему 14, если начинается с 0?
это не будет работать если есть два дня и больше одного тренда
Добрый день. Спасибо за видео! Можете, пожалуйста, подсказать тему редактора?
:) конечно! Dark purple
Какого уровня задачи с codewars стоит решать, чтобы укрепить знания алгоритмов для джуна на фронтенд?
Задачка простейшая. Но решить ее не смог, имея опыт решения много более сложных задач. Не уловил сразу ключевой момент - нужно всего лишь просуммировать отрезки между соседними днями с восходящим трендом. Печаль.
Нестрашно! Но да, бывает так, что самое сложное в задаче - понять, как трансформировать ее условие в более понятные и простые сущности)
Я может не до конца понял условие. Но вроде же на массиве типа [1,3,6,9] этот алгоритм будет работать неправильно? Или будет третья часть, где в условиях будет возможность не продавать и не покупать акции, когда нам это не нужно?
Он будет работать корректно - так как мы можем продавать и покупать в один и тот де день. Покупать и продавать мы можем сколько угодно раз - нет ограничений. И да есть еще версии этой задачи когда нам надо посчитать профит с минимальным количеством покупок/продаж.
Я думав ми не можемо купляти і продавати в один день і чуть не зламав мозг, а тут оказується все так просто
Можете мне помочь, что делать. Я начал учиться на пайтон бекенд разработчика. обучение 10 месяцев. прошло 2 месяца. и в один момент я просто не понимаю что вообще делать как решать задачи не могу выстроить алгоритм решений данной задачи. Я уже самый отстающий на потоке. И мотивации продолжать нет и желания что то делать тоже. Очень тяжело дается мне все это. Я порой сижу и думаю, может это действительно не мое. Что делать в такой ситуации??? Проблема наверное в основном в том что я не могу выстроить алгоритмическую цепочку как решать задачи. Полная каша в голове. Материал не усваивается тоже. Хотя пишу лекции и пересматриваю материал несколько раз. У нас есть разборы ДЗ я смотрю вроде все понятно как делают наставники, но я понимаю что я тупо копирую код и все. а сам не понимаю.
Привет, Арсений. Я не знаю, где Вы учитесь, но это вопрос явно к наставникам (менторам) и самой обучающей компании. Если Вы откровенно расскажете Вашим менторам текущую ситуацию, может быть это все изменит. По идее обучающие компании должны быть сильно заинтересованы в том, чтоб их студенты высоко перфомили. Где-то они не дорабатывают. Или может у Вас не тот подход, что они закладывали. Нужно с ними обсуждать.
Но в любом случае повторять код за кем-то в самом начале - это правильно! Главное понимать принцип, алгоритм и то, что именно Вы пишете. Самостоятельные решения будут приходить только с практикой. Поначалу все копируют. Я тоже в комментах часто советую посмотреть видео с решением задачи. И попробовать воспроизвести код - чтоб хоть немного отложилось в памяти. Еще лучше через несколько недель попробовать вернуться к той же задаче и попробовать снова воспроизвести решение. Да, это требует труда. Но потом Вы даже не поймете, когда уже начали самостоятельно решать аналогичные задачи. И все благодаря Вашим тренировкам. Терпения Вам и успехов!
@@frontendscience Спасибо большое за развернутый ответ.
Дякую! Дійсно легка задачка! Правда спочатку поспішив і prices[i+1]; По вашому відео зрозумів, що просто треба було брати менший індекс на 1
задача неправильно называется, в реальности, нужно решать, купить в 1 день по 7 или нет, а если в 4 день было бы 6, считался бы он лучшем временем для покупки? И в описании: "...прибыль, которую можно заработать..." - нужна машина времени, чтобы получить такой массив. В общем, задачка ради задачки
Нужно мыслить шире. Например есть задача проанализировать архив цен за последний месяц и понять какой максимальный профит можно было бы заработать.
как-то слишком легко
var maxProfit = function(prices) {
let profit = 0
for (let i = 0; i < prices.length - 1; i++) {
const element = prices[i];
const nextElement = prices[i + 1]
if (element < nextElement) {
profit += nextElement - element
}
}
return profit
};
Да, когда понимаешь как решать - все выходит очень просто.
Какой я сложным способом это решил
Условие задачи абсолютно некорректное. Зачем впутывать сюда акции?! Если есть операция покупки в какой-то точке, то нужно заранее знать будут ли акции дороже, а вдруг далее только спад, можно ли продавать и покупать в одной точке и т.д.? Гораздо корректнее написать условие с использованием отрезков например. Leetcode часто грешит плохим описанием.
Что за фильм во вставке про акции?
Хороший год
@@frontendscience спасибо
Сначала решил так, как у Автора. Потом вспомнил, что для получения результирующего значения массива есть метод reduce().
const profit = prices.reduce((acc, cur, index) => acc += (cur > prices[index-1]) ? cur - prices[index-1] : 0, 0);
Молю!!! Расжуйте микротаски и макротаски в одном из ваших видео. Очень тугая тема.
Есть такое в планах :)
2:45
"...Покупай!"
"Паршивый жучила он сбил цены и теперь покупает акции по дешевке!! Покупай!!"
😂😂😂
🤠
нет ну это даже первый класс решит. слишком простая задачка.