← All Posts

股票最大利润

谢特,每次三分钟热度的算法题

题目#

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?

示例 1:

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

原题链接

思考#

  • 价格数组的顺序是固定的
  • 买入卖出只能是 前面小 后面大
  • 如果天数小于两天 或价格一直跌的话 则不赚钱

根据前两条,我们可以先设置一个起点作为最小价格,之后遍历判断 当天价格是否小于初始最小价格,决定是否替换最小价格。

设置初始最高价格索引为 1(因为初始最低价索引是 0), 遍历时用 arr[idx] - low 获取最大值,每次最大值与之比较。

function maxProfit(prices) {
if (prices.length < 2) return 0;
let low = prices[0];
let profit = 0;
let idx = 1;
while (idx < prices.length) {
profit = Math.max(prices[idx] - low, profit);
low = Math.min(prices[idx], low);
idx++;
}
return profit;
}

good!