题目是这样描述,可以多次进行买卖,但是只能卖完之后再买。

还有一个限制就是,卖完之后隔一天才可以继续买股票。

这里需要考虑三种状态,持有,卖出,冷冻期。

持有,可以是刚买,或者买了之后一直没卖。

卖出,则只能是从持有卖出。

冷冻期,则是卖出后进入冷冻期

所以三者的转换关系如下

Untitled

对于就是上一轮持有(没有任何操作),或者上一轮的冷冻+购买股票。所以

持有 = 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
}