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