谢特,每次三分钟热度的算法题
题目
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
示例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!