一、k=1

  1. var maxProfit = (prices) {
  2. let n = prices.length
  3. let dp_i_0 = 0;
  4. let dp_i_1 = -prices[0];
  5. for(let i = 0;i < n; i++) {
  6. dp_i_0 = Math.max(dp_i_0, dp_i_1 + prices[i]);
  7. dp_i_1 = Math.max(dp_i_1, -prices[i]);
  8. }
  9. return dp_i_0
  10. }

二、k=+infinity

  1. var maxProfit = (prices) {
  2. let n = prices.length
  3. let dp_i_0 = 0;
  4. let dp_i_1 = -prices[0];
  5. for(let i = 0;i < n; i++) {
  6. dp_i_0 = Math.max(dp_i_0, dp_i_1 + prices[i]);
  7. dp_i_1 = Math.max(dp_i_1, dp_i_0 - prices[i]);
  8. }
  9. return dp_i_0
  10. }

三、k=+infinity with cooldown

  • 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
  • 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。

    1. var maxProfit = (prices) {
    2. let n = prices.length
    3. let dp_i_0 = 0;
    4. let dp_i_1 = -infinity;
    5. let dp_pre_0 = 0;
    6. for(let i = 0;i < n; i++) {
    7. let temp = dp_i_0;
    8. dp_i_0 = Math.max(dp_i_0, dp_i_1 + prices[i]);
    9. dp_i_1 = Math.max(dp_i_1, dp_pre_0 - prices[i]);
    10. dp_pre_0 = temp;
    11. }
    12. return dp_i_0
    13. }

    四、k=+infinity with fee

    1. var maxProfit = (prices) {
    2. let n = prices.length
    3. let dp_i_0 = 0;
    4. let dp_i_1 = -prices[0] - fee;
    5. for(let i = 0;i < n; i++) {
    6. dp_i_0 = Math.max(dp_i_0, dp_i_1 + prices[i]);
    7. dp_i_1 = Math.max(dp_i_1, dp_i_0 - prices[i] - fee);
    8. }
    9. return dp_i_0
    10. }