一、只能有一次買入賣出的機會 LeetCode121
第幾回賣出能獲得的最大值是 前一次賣出獲得的最大值和此次賣出獲得的減去此次以前的最小值二者之間的大值。
max[i] = max(max[i-1], price[i]-minPrice)數組
func maxProfit1_1(prices []int) int {
minPrice := prices[0]
dp := make([]int, len(prices))
dp[0] = 0
for i := 1; i < len(prices); i++ {
dp[i] = myMax(dp[i-1], prices[i]-minPrice)
minPrice = myMin(minPrice, prices[i])
}
return dp[len(prices)-1]
}
也能夠不使用數組,直接變量保存當前最大值便可。
func maxProfit(prices []int) int {
maxProfit := 0
minPrice := prices[0]
for i := 1; i < len(prices); i++ {
maxProfit = myMax(maxProfit, prices[i]-minPrice)
minPrice = myMin(minPrice, prices[i])
}
return maxProfit
}
![](https://user-gold-cdn.xitu.io/2019/9/6/16d05ed51ed836f7?w=660&h=136&f=png&s=24046)
func myMax(a, b int) int {
if a > b {
return a
} else {
return b
}
}
func myMin(a, b int) int {
if a > b {
return b
} else {
return a
}
}
複製代碼
二、能夠屢次買入賣出 LeetCode122bash
貪心,每次只要比上次有增加,就能夠賣出。func maxProfit(prices []int) int {
maxProfit := 0
for i := 0; i < len(prices)-1; i++ {
if prices[i] < prices[i+1] {
maxProfit += prices[i+1] - prices[i]
} else {
continue
}
}
return maxProfit
}
複製代碼