SOURCE

//
// price[i], K笔交易,求最大获利
//

function maxProfit(prices, K) {
    let profit = new Array(prices.length) // profit[i][k][0] 第i天、k次交易、不持有股票
    

    for(let i in prices) {
        profit[i] = new Array(K+1)
        for(let k = 0; k <= K; k++) {
            profit[i][k] = new Array(2);
            if(k == 0) {
                profit[i][0][0] = 0
                profit[i][0][1] = -100000
            } else {
                if (i > 0) {
                    profit[i][k][0] = Math.max(profit[i-1][k][1]+prices[i], profit[i-1][k][0])
                    profit[i][k][1] = Math.max(profit[i-1][k][1], profit[i-1][k-1][0]-prices[i])
                } else {
                    profit[i][k][0] = 0
                    profit[i][k][1] = -prices[i]
                }
            }
        }
        
    }
    console.log(profit);

    return profit[prices.length - 1][K][0];
}

let profit = maxProfit([5, 4, 7, 10, 8, 11, 15, 10, 11], 2)
console.log(profit);

//
// price[i], 1笔交易,求最大获利
//

function maxProfit_1(prices) {
    let profit = new Array(prices.length) // profit[i][k][0] 第i天、k次交易、不持有股票
    

    for(let i in prices) {
        profit[i] = new Array(2)
        if(i == 0) {
            profit[i][0] = 0
            profit[i][1] = -prices[i]
        } else {
            profit[i][0] = Math.max(profit[i-1][0], profit[i-1][1] + prices[i])
            profit[i][1] = Math.max(profit[i-1][1], - prices[i])
        }
    }
    console.log(profit);

    return profit[prices.length - 1][0];
}

let profit1 = maxProfit_1([5, 4, 7, 10, 8, 11, 15, 10, 11])
console.log(profit1);


//
// price[i], 无限次笔交易,求最大获利
//

function maxProfit_inf(prices) {
    let profit = new Array(prices.length) // profit[i][k][0] 第i天、k次交易、不持有股票
    

    for(let i in prices) {
        profit[i] = new Array(2)
        if(i == 0) {
            profit[i][0] = 0
            profit[i][1] = - prices[i]
        } else {
            profit[i][0] = Math.max(profit[i-1][0], profit[i-1][1] + prices[i])
            profit[i][1] = Math.max(profit[i-1][1], profit[i-1][0] - prices[i])
        }
    }
    console.log(profit);

    return profit[prices.length - 1][0];
}

let profit_inf = maxProfit_inf([5, 4, 7, 10, 8, 11, 15, 10, 11])
console.log(profit_inf);


//
// price[i], 2笔交易,求最大获利
//

function maxProfit2(prices) {
    let profit = new Array(prices.length) // profit[i][k][0] 第i天、k次交易、不持有股票
    

    for(let i in prices) {
        profit[i] = new Array(3)
        for(let k = 0; k <= 2; k ++ ) {
            profit[i][k] = new Array(2)
            if(k == 0) {
                profit[i][0][0] = 0
                profit[i][0][1] = -100000
            } else if (k == 1) {
                if(i == 0) {
                    profit[0][1][0] = -100000
                    profit[0][1][1] = -prices[0]
                } else {
                    profit[i][k][0] = Math.max(profit[i-1][k][0], profit[i-1][k][1] + prices[i])
                    profit[i][k][1] = Math.max(profit[i-1][k][1], profit[i-1][k-1][0] - prices[i])
                }
            } else {
                if(i == 0) {
                    profit[0][2][0] = -100000
                    profit[0][2][1] = - 100000
                } else {
                    profit[i][k][0] = Math.max(profit[i-1][k][0], profit[i-1][k][1] + prices[i])
                    profit[i][k][1] = Math.max(profit[i-1][k][1], profit[i-1][k-1][0] - prices[i])
                }
            }
        }
    }
    console.log(profit);

    return profit[prices.length - 1][2][0];
}

let profit2 = maxProfit2([5, 4, 7, 10, 8, 11, 15, 10, 11])
console.log(profit2);
console 命令行工具 X clear

                    
>
console