原题链接:leetcode-cn.com/problems/be…
解题思路:
- 对于第i天的价格来说,当前已知以前所有价格中的最小值,并且第i天只能与其之前的最小价格交易。
- 如果第i天价格比最小值小,利润必然为负,则无需交易,只要将第i天价格设为最小值。
- 如果第i天价格比最小值大,则可以计算当前利润并与历史利润对比取最大值。
- 对于第一天,只需要将当前价格设为最小值,且无需交易,因此将最小值的初始状态设为Infinity,保证第一天价格能够被正常处理。
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function (prices) {
let max = 0; // 存储最大利润
// 存储股票的最低价格,为保证第一个元素能被正常获取,设置为Infinity
let minPrice = Infinity;
// 遍历所有股票价格
for (const price of prices) {
if (price < minPrice) {
// 当当前价格小于已存储的最小价格时,此时利润为负,无需进行交易
// 同时之后的交易肯定会根据当前价格进行,因此把当前价格设置为最小值
minPrice = price;
} else {
// 当前价格大于等于最小值,则可以进行交易
// 同时去当前利润与历史最大利润较大者,设置为新的最大值
max = Math.max(price - minPrice, max);
}
}
return max;
};