> 文档中心 > LeetCode188. 买卖股票的最佳时机 IV

LeetCode188. 买卖股票的最佳时机 IV


思路

该题是买卖k次股票。和买卖两次是一样的。

LeetCode123. 买卖股票的最佳时机 III_想进阿里的小菜鸡的博客-CSDN博客

只是需要把内层循环的所有dp[i][j]中的j给全部找出来就好了,买卖k次有k*2种j。如果下标还是从0开始的话会产生k*2个dp[i][j]会很麻烦,要是用奇数表示持有,偶数表示不持有时的最大价值。则会比较简单。就是将之前题的奇偶反转下就可以了。

// 股票状态: 奇数表示第 k 次交易持有/买入, 偶数表示第 k 次交易不持有/卖出, 0 表示没有操作

初始化的时候也就是奇数买入的全部为-prices[0]; 其他全部一样即可。

代码

class Solution {    public int maxProfit(int k, int[] prices) { if(prices.length ==0){     return 0; } int dp[][] = new int[prices.length][k*2+1]; for(int i =1;i<k*2;i+=2){   dp[0][i] = -prices[0];  } for(int i =1;i<prices.length;i++){     for(int j =0;j<k*2-1;j+=2){  dp[i][j+1]=Math.max(dp[i-1][j]-prices[i],dp[i-1][j+1]);  dp[i][j+2]=Math.max(dp[i-1][j+2],dp[i-1][j+1]+prices[i]); }   } return dp[prices.length-1][k*2];    }}