代码:
我的状态方程:
buy[i][j]=max{buy[i−1][j],sell[i−1][j-1]−price[i]}
题解里的:
buy[i][j]=max{buy[i−1][j],sell[i−1][j]−price[i]}
..没理解题解的 但我的通过了
class Solution {public int maxProfit(int k, int[] prices) {if(prices.length==0)return 0;int n = prices.length;k = Math.min(k,n/2);if(k==0)return 0;int[][] buy = new int[n][k];int[][] sell = new int[n][k];buy[0][0]=-prices[0];sell[0][0]=0;for(int i=1;i<k;i++){buy[0][i] = sell[0][i] = Integer.MIN_VALUE / 2;}for(int i=1;i<n;i++){buy[i][0] = Math.max(buy[i-1][0],-prices[i]);sell[i][0] = Math.max(sell[i-1][0],buy[i-1][0]+prices[i]);for(int j=1;j<k;j++){buy[i][j] = Math.max(sell[i-1][j-1]-prices[i],buy[i-1][j]);sell[i][j] = Math.max(buy[i-1][j]+prices[i],sell[i-1][j]);}}return Arrays.stream(sell[n-1]).max().getAsInt();}
}