121. Best Time to Buy and Sell S

2022-07-26  本文已影响0人  sarto

题目

给定一个数组 prices 其中 prices[i] 代表给定股票在第 i 天的价格。
你希望通过一次买卖来最大化你的利润。
返回你可以获得的最大利润,如果不能获取利润,则返回 0.

解析

这个题目抽象为,在一个数组中找到两个数字,其中后一个比前一个大,并且这两个数字的差值最小。
当我们遍历这个数组是,首先考虑何时买入?一旦我们遇到一个历史最低点,则设置该点buy为将来的买入点,因为无论将来值如何,在该点买入才能最大收益。
然后考虑何时卖出,遍历时,一旦当前值比记录的buy值大,则计算可能获得的利润,将该利润与profit对比,取最大值。

组后,代码逻辑应该为先判定卖出,再更新买入。

伪代码

profit = 0
buy = prices[0]
for i:=1;i<len(prices); i++
  if prices[i] < buy
    buy = prices[i]
  if profit < prices[i] - buy
     profit = prices[i] - buy
return profit

代码

func maxProfit(prices []int) int {
    profit := 0
    buy := prices[0]
    for i:=1; i<len(prices); i++ {
        if profit < prices[i] - buy {
            profit = prices[i] - buy
        }
        if prices[i] < buy {
            buy = prices[i]
        }
    }
    return profit
}
image.png
上一篇下一篇

猜你喜欢

热点阅读