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

题意理解: 

        给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。

        设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说,你最多可以买 k 次,卖 k 次。

        注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

        

        这道题的特别之处是,最多可以买卖k次,k是一个可以变化的值,所以使用j对k的数值进行遍历。

解题思路:

        (1)定义dp二维[][]数组

                dp[0][0]表示不操作

                dp[i][j=2(k-1)+1]表示第k次买入

                dp[i][j=2(k-1)+2]表示第k次卖出

          (2) 初始化

                dp[0][0]=0

                dp[0][j=2(k-1)+1]=-prices[i]

                dp[0][j=2(k-1)+2]=0

          (3) 递推公式

                dp[i][j=2(k-1)+1]

                =max(延续之前状态,买入)

                =max(dp[i-][j=2(k-1)+1],dp[i-1][j=2(k-1)]-prices[i])

                dp[i][j=2(k-1)+2]=-prices[i]

                =max(延续之前状态,卖出)

                =max(dp[i-][j=2(k-1)+2],dp[0-1][j=2(k-1)+1]+prices[i])

1.解题

public int maxProfit(int k, int[] prices) {
        int[][] dp=new int[prices.length][2*k+1];
        for(int i=0;i<=2*k;i++){
            if(i%2==0)
                dp[0][i]=0;
            else dp[0][i]=-1*prices[0];
        }
        for(int i=1;i

2.分析

时间复杂度:O(kn)

空间复杂度:O(2kn)

你可能感兴趣的:(刷题训练营,leetcode,算法,数据结构)