LeetCode 121. 买卖股票的最佳时机
原题链接
简单
作者:
ABC_555
,
2020-07-18 11:18:06
,
所有人可见
,
阅读 2
思路
思路1:暴力遍历所有买入时间可能,卖出可能,时间N^2,空间1。(太简单,跳过)
思路2:单调队列,空间复杂度N,空间复杂度N
思路3:用一个变量minPrices记录到当前的最小值
思路2
func maxProfitV1(prices []int) (res int) {
queue := make([]int, 0)
for idx, price := range prices {
// 弹出所有比当前元素大的元素
for len(queue) > 0 && prices[queue[len(queue)-1]] >= price {
queue = queue[:len(queue)-1]
}
queue = append(queue, idx)
if prices[idx] - prices[queue[0]] > res {
res = prices[idx] - prices[queue[0]]
}
continue
}
return
}
思路3
// 检讨上面的代码,不难发现,单调队列中只用到一个队列头,
// 那么我们能不能检讨一下?是否不用队列?而是仅仅用一个minPrices来保存到当前位置为止的最小值呢???当然是可以的!
func maxProfit(prices []int) (res int) {
if len(prices) == 0 {
return
}
minPrice := prices[0]
for _, price := range prices {
if price - minPrice > res {
res = price - minPrice
}
if price < minPrice{
minPrice = price
}
}
return
}