
动态规划:
a[i] 表示第(i+1)次买入,b[i] 表示第(i+1)次卖出
- 当前状态可以由两种状态转化而来,一种是继承前一天的自己,一种是由前一天的买入卖出状态相互转换
- 不需要考虑当天是否可以多次买入卖出,因为这种操作不会产生收益,也就是不会影响结果
- 所以我们只需要一直更新 a, b 数组即可
- 最后返回
b[k-1]
func maxProfit(k int, prices []int) int {
a := make([]int, k)
b := make([]int, k)
for i := range a {
a[i] = -prices[0]
}
for _, v := range prices {
for i := range a {
if i > 0{
a[i] = max(a[i], b[i-1]-v)
b[i] = max(b[i], a[i]+v)
}else {
a[i] = max(a[i], -v)
b[i] = max(b[i], a[i]+v)
}
}
}
return b[k-1]
}
func max(a, b int) int {
if a > b {
return a
}
return b
}