剑指 Offer 63. 股票的最大利润(中等)

通过率 63.4%

题目链接

题目描述:

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

示例 1:

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

示例 2:

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

限制:

0 <= 数组长度 <= 10^5

思路:

用一个变量维护此前历史最低买入价,将此时卖出所得利润与之前最高利润作比较,保留更高的利润,那么遍历一次就能得到结果

 1 /*JavaScript*/
 2 /**
 3  * @param {number[]} prices
 4  * @return {number}
 5  */
 6 var maxProfit = function(prices) {
 7     let buy = prices[0] //历史最低买入价
 8     let maxq = 0 //最高利润
 9     prices.forEach(p => {
10         buy = Math.min(buy, p)
11         maxq = Math.max(maxq, p-buy)
12     })
13     return maxq
14 };
原文地址:https://www.cnblogs.com/wwqzbl/p/15175714.html