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

class Solution {
    public int maxProfit(int k, int[] prices) {
        int n = prices.length;
        if(n < 2) return 0;
        if(k >= n) {
            int res = 0;
            for(int i = 1; i < n; i++) {
                res += Math.max(0,prices[i] - prices[i-1]);
            }
            return res;
        }
        int[] l = new int[k+1]; // l[i][j]当前第i天最多完成j比交易且最后一次交易在第i天完成
        int[] g = new int[k+1];// g[i][j]当前第i天最多完成j比交易
        for(int i = 1; i < n; i++) {
            int diff = prices[i] - prices[i-1];
            for(int j = k; j > 0; j--) {
                l[j] = Math.max(g[j-1],l[j]) + diff;
                g[j] = Math.max(g[j],l[j]);
            }
        }
        return g[k];
    }
}
原文地址:https://www.cnblogs.com/yonezu/p/13339906.html