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

image.png

代码

  1. class Solution {
  2. public int maxProfit(int k, int[] prices) {
  3. int size = prices.length;
  4. if(size == 0) return 0;
  5. //多了一个0状态
  6. int jLen = 2 * k + 1;
  7. int [][] dp = new int[size][jLen];
  8. //奇数次数买入,偶数次数卖出
  9. for(int j = 1; j < 2 * k ; j +=2 ){
  10. dp[0][j] = -prices[0];
  11. }
  12. for(int i = 1 ; i < size; i++ ) {
  13. //2 * k - 1 + 2 = 2 * k + 1 = jLen
  14. for( int j = 0; j < 2 * k -1; j += 2) {
  15. //奇数
  16. dp[i][j + 1] = Math.max(dp[i - 1][j + 1], dp[i - 1][j] - prices[i]);
  17. dp[i][j + 2] = Math.max(dp[i - 1][j + 2], dp[i - 1][j + 1] + prices[i]);
  18. }
  19. }
  20. return dp[size - 1][2 * k ];
  21. }
  22. }