思路
这里是买卖k次,其实就是把之前买卖2次那道题抽象了出来。
买卖2次,5种状态
买卖k次,2k+1种状态。
然后分奇偶讨论。
注意:循环变量是 i+1,i+2这样子的,
var maxProfit = function(k, prices) {
// 有k次买卖,那么就是2k+1个状态(买、卖、初始0)
// 奇数是买入,偶数是卖出
//题目数据可以取到0,所以提前判断,否则后面会报错
if(prices===null||prices.length<2||k===0) return 0
let dp =new Array(prices.length).fill(0).map(()=>new Array(2*k+1).fill(0))
//i的条件是i+2
for(let i=1;i<2*k;i+=2){
dp[0][i] =-prices[0] //奇数,即买入时的初始值都是-prices[0]
}
for(let i=1;i<prices.length;i++){
//j的条件是j+2
for(let j=0;j<=2*k;j+=2){
dp[i][j+1] =Math.max(dp[i-1][j+1],dp[i-1][j]-prices[i])
dp[i][j+2] =Math.max(dp[i-1][j+2],dp[i-1][j+1]+prices[i])
}
}
return dp[prices.length-1][2*k]
};