hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧!
问题分析
本题要求计算在可以多次买卖股票(但任何时候最多只能持有一股股票,也可以在同一天买卖)的情况下能获得的最大利润。解题的关键在于抓住股票价格上涨的区间,只要后一天的价格比前一天高,就进行一次买卖操作,将这些利润累加起来就能得到最大利润。
/*** 计算多次买卖股票能获得的最大利润* @param {number[]} prices - 表示每天股票价格的数组* @return {number} - 最大利润*/
function maxProfit(prices) {// 初始化最大利润为 0let maxProfit = 0;// 从数组的第二个元素开始遍历for (let i = 1; i < prices.length; i++) {// 如果当前价格大于前一天的价格if (prices[i] > prices[i - 1]) {// 计算这两天的利润并累加到最大利润中maxProfit += prices[i] - prices[i - 1];}}// 返回最大利润return maxProfit;
}
代码解释
初始化最大利润:将 maxProfit 初始化为 0,用于存储最终的最大利润。
遍历数组:从数组的第二个元素开始遍历,因为要比较相邻两天的价格。
判断价格变化:对于每一天,如果当天的价格 prices[i] 大于前一天的价格 prices[i - 1],说明这是一个价格上涨的区间,将这两天的价格差(即利润)累加到 maxProfit 中。
返回结果:遍历结束后,返回 maxProfit,即为能获得的最大利润。