**思路与买卖股票第三题相似,但是限制k次。 可以利用一维数组进行传递 ,利用上一次卖出股票最大值传入下一次的买入。**
public int maxProfit(int k, int[] prices) {
if(prices.length == 0 || k == 0) return 0;
int dp[] = new int[k*2];
// 初始化 dp数组
for(int i = 0 ; i < 2*k ;i+=2){
dp[i] = 0;
dp[i+1] = -prices[0];
}
for(int i = 1; i < prices.length;++i){
dp[0] = Math.max(dp[0],dp[1]+prices[i]); // first time sell
dp[1] =Math.max(dp[1],-prices[i]); // first time buy
for(int j = 2 ; j < 2*k ;j+=2){
dp[j+1] =Math.max(dp[j+1],dp[j-2]-prices[i]);// 将第一次以及以前的最大收入 转入 下一次 buy中
dp[j] = Math.max(dp[j],dp[j+1]+prices[i]); // 计算出此次的最大收入
}
}
return dp[2*k-2]; // 每次的最大收入 存储在索引为奇数的 数组中
}