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]; } }