题目是这样描述,可以多次进行买卖,但是只能卖完之后再买。
还有一个限制就是,卖完之后隔一天才可以继续买股票。
这里需要考虑三种状态,持有,卖出,冷冻期。
持有,可以是刚买,或者买了之后一直没卖。
卖出,则只能是从持有卖出。
冷冻期,则是卖出后进入冷冻期
所以三者的转换关系如下
对于就是上一轮持有(没有任何操作),或者上一轮的冷冻+购买股票。所以
持有 = max(上一轮持有, 上一轮冷冻-当前股价)
卖出 = max(上一轮卖出,上一轮持有+当前股价)
冷冻= max(上一轮冷冻,上一轮卖出)
综上所述,有如下代码
func maxProfit309(prices []int) int {
// 持有,冷冻,卖出
max := 0
// a=持有, b=卖出,c=冷冻
a, b, c := -prices[0], 0, 0
for i := 1; i < len(prices); i++ {
a1 := c - prices[i]
if a > a1 {
a1 = a
}
b1 := b
if a+prices[i] > b1 {
b1 = a + prices[i]
}
c1 := c
if b > c1 {
c1 = b
}
a, b, c = a1, b1, c1
if a > max {
max = a
}
if b > max {
max = b
}
if c > max {
max = c
}
}
return max
}