public int maxProfit(int k
, int[] prices
) {
        
        
        
        int n 
= prices
.length
;
        if (n 
<= 1) return 0;
        
        if (k 
>= n 
/ 2) {
            
            
            
            int[] dp 
= new int[2];
            dp
[0] = 0;
            dp
[1] = -prices
[0];
            
            for (int i 
= 1; i 
< n
; i
++) {
                dp
[0] = Math
.max(dp
[0], dp
[1] + prices
[i
]);
                dp
[1] = Math
.max(dp
[1], dp
[0] - prices
[i
]);
            }
            
            return dp
[0];
        }
        else {
            int[][] dp 
= new int[k
+1][2];
            
            for (int i 
= 1; i 
<= k
; i
++) {
                dp
[i
][1] = -prices
[0];
            }
            
            for (int i 
= 1; i 
< n
; i
++) {
                for (int j 
= 1; j 
<= k
; j
++) {
                    dp
[j
][0] = Math
.max(dp
[j
][0], dp
[j
][1] + prices
[i
]);
                    dp
[j
][1] = Math
.max(dp
[j
][1], dp
[j
-1][0] - prices
[i
]);
                }
            }
            
            return dp
[k
][0];
        }
    }
                
                
                
        
    
 
转载请注明原文地址:https://tech.qufami.com/read-23513.html