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

Posted HardyDragon_CC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了188.买卖股票的最佳时机IV相关的知识,希望对你有一定的参考价值。

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

思路

  • dp 二维数组的含义是 第 i 天第 k 次交易状态(买入卖出)的利润;
  • 初始化dp数组时,所有的买入都是 -price[0];所有的卖出都是 0;
  • 递推的是第 k 次买入和卖出的利润;
  • 最后要返回的最后一次卖出的利润,所以递推时 要使得 j + 2 = 2 * k ,即遍历条件为 for(int j = 0;j <= 2 * k - 2;j += 2);最后 return dp[size - 1][2 * k];
class Solution 
    public int maxProfit(int k, int[] prices) 
        if(prices.length == 0) return 0;
        int size = prices.length;
        // k 次交易,每次可以买或不买,还有一个是不操作,一共 2 * k + 1 情况
        int[][] dp = new int[size][2 * k + 1];

        // 所有的买入初始化都是负
        for(int i = 1;i < 2 * k;i+=2)
            dp[0][i] = -prices[0];
        

        for(int i = 1;i < size;i++)
            // j 的遍历方式,每次递增 2
            for(int j = 0;j <= 2 * k - 2;j += 2)
                // 第k次买入,可能是之前就买了,可能是今天才买
                dp[i][j + 1] = Math.max(dp[i-1][j + 1],dp[i-1][j] - prices[i]);

                // 第k次卖,可能是之前就卖了,也可能是今天才卖
                dp[i][j + 2] = Math.max(dp[i-1][j + 2],dp[i-1][j + 1] + prices[i]);
            
        
        // 第k次卖出是最高利润
        return dp[size - 1][2 * k];
    

以上是关于188.买卖股票的最佳时机IV的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

[Leetcode188] 买卖股票的最佳时机IV 动态规划 解题报告

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

Leetcode No.188 买卖股票的最佳时机 IV(动态规划)