[188]。IV(K最大トランザクション)を購入し、販売在庫するための最良の時間

株式IVを購入し、販売するための188のベストタイム


リンク

タイトル説明

ここに画像を挿入説明

思考

[問題のGM原液]
状態遷移方程式見つける
とベースケース

この問題は、注意が必要で、kはタイムアウト場合、総会で
あればK> N / 2は、無制限の取引と同等であろう

    public int maxProfit(int k, int[] prices) {
        if(prices == null || prices.length == 0){
            return 0;
        }
        int n = prices.length;
        if(k > n/2){
            return maxProfit(prices);
        }
        int[][][] dp = new int[n][k+1][2];
        for(int i = 0; i < n;i++){
            for(int j = 1  ; j < k+1 ;j++ ){
                
                //base case
                if(i-1 == -1){
                    //max(0,-infinity);
                    dp[i][j][0] = 0;
                    //max(-infinity,-prices[i]);
                    //dp[i][0][1] = -prices[i];
                    //max(-infinity,-prices[i]);
                    dp[i][j][1] = -prices[i];
                    continue;
                }
                if(j == 1){
                    dp[i][j][0] =  Math.max(dp[i-1][j][0],dp[i-1][j][1]+prices[i]);;
                    dp[i][j][1] = Math.max(dp[i-1][j][1],-prices[i]);
                }
                
                dp[i][j][0] = Math.max(dp[i-1][j][0],dp[i-1][j][1]+prices[i]);
                dp[i][j][1] = Math.max(dp[i-1][j][1],dp[i-1][j-1][0]-prices[i]);
            }
        }
        return dp[n-1][k][0];
    }
    
    private int maxProfit(int[] prices) {
        if(prices == null || prices.length == 0){
            return 0;
        }
        int maxProfit = 0;
        for(int i = 0; i < prices.length-1; i++){
            if(prices[i+1] > prices[i]){
                maxProfit += prices[i+1]-prices[i];
            }
        }
        return maxProfit;
    }
公開された55元の記事 ウォンの賞賛1 ビュー865

おすすめ

転載: blog.csdn.net/weixin_42469108/article/details/105091933