一、k=1
var maxProfit = (prices) {let n = prices.lengthlet dp_i_0 = 0;let dp_i_1 = -prices[0];for(let i = 0;i < n; i++) {dp_i_0 = Math.max(dp_i_0, dp_i_1 + prices[i]);dp_i_1 = Math.max(dp_i_1, -prices[i]);}return dp_i_0}
二、k=+infinity
var maxProfit = (prices) {let n = prices.lengthlet dp_i_0 = 0;let dp_i_1 = -prices[0];for(let i = 0;i < n; i++) {dp_i_0 = Math.max(dp_i_0, dp_i_1 + prices[i]);dp_i_1 = Math.max(dp_i_1, dp_i_0 - prices[i]);}return dp_i_0}
三、k=+infinity with cooldown
- 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
var maxProfit = (prices) {let n = prices.lengthlet dp_i_0 = 0;let dp_i_1 = -infinity;let dp_pre_0 = 0;for(let i = 0;i < n; i++) {let temp = dp_i_0;dp_i_0 = Math.max(dp_i_0, dp_i_1 + prices[i]);dp_i_1 = Math.max(dp_i_1, dp_pre_0 - prices[i]);dp_pre_0 = temp;}return dp_i_0}
四、k=+infinity with fee
var maxProfit = (prices) {let n = prices.lengthlet dp_i_0 = 0;let dp_i_1 = -prices[0] - fee;for(let i = 0;i < n; i++) {dp_i_0 = Math.max(dp_i_0, dp_i_1 + prices[i]);dp_i_1 = Math.max(dp_i_1, dp_i_0 - prices[i] - fee);}return dp_i_0}
