В этом выпуске мы объясним один из самых известных вопросов, заданных в интервью по JavaScript. Вам будет предоставлен массив целых чисел, который представляет цены акций в каждый день. Ваша задача найти лучшую цену покупки и продажи, которая принесет вам максимальную прибыль.
Массив будет иметь вид [6, 1, 2, 5, 7], а результат будет равен 6. Самая низкая цена акции приходится на 2-й день, что равно 1, а самая высокая цена — на 5-й день, что равно 7. Итак. покупка по цене 1 и продажа по 7 даст нам прибыль в размере 6.
Теперь давайте рассмотрим, как найти это в JavaScript.
function findMaximumProfit(prices) { const length = prices.length; let buyPrice = prices[0]; let maxProfit = 0; for (let i = 1; i < length; i++) { if (buyPrice > prices[i]) { buyPrice = prices[i]; } else { maxProfit = prices[i] - buyPrice; } } return maxProfit; } console.log(findMaximumProfit([6, 1, 2, 5, 7])); //6
Пояснение кода:
Сначала мы объявим несколько переменных: length для хранения длины переменной, объявим buyPrice и присвоим первую цену из массива, а maxProfit присвоим 0. Мы начнем итерацию с первого индекса, так как мы уже присвоили 0-е значение для переменная. На каждой итерации мы будем проверять, больше ли buyPrice текущей цены. Если да, то мы изменим значение на эту цену. В противном случае мы проверим прибыльную покупку, вычитая оба значения. В конце цикла мы вернем значение maxProfit.
Этот массив возвращает прибыль как 6. Нам нужно купить акцию по цене 1 и продать по цене 7.
Существует также другой вариант этих вопросов, когда интервьюер может спросить дату покупки и продажи вместо прибыли. Мы также можем легко решить эту проблему, изменив тот же код.
function findBuySellDate(prices) { const length = prices.length; let buyPrice = prices[0]; let maxProfit = 0; let buyDate = 0; let dates = []; for (let i = 1; i < length; i++) { if (buyPrice > prices[i]) { buyPrice = prices[i]; buyDate = i; } else { maxProfit = prices[i] - buyPrice; dates = [buyDate, i]; } } return dates; } console.log(findBuySellDate([6, 1, 2, 5, 7])); // [1, 4]
Запуск этой функции с тем же кодом сейчас вернет индексы для покупки и продажи.
Смотрите на нашем YouTube