Day45 算法记录| 动态规划 12

股票问题

  • 309. 买卖股票的最佳时机含冷冻期
  • 714.买卖股票的最佳时机含手续费

309. 买卖股票的最佳时机含冷冻期

这个视频讲解的很好 309.最佳买卖股票时机含冷冻期
Day45 算法记录| 动态规划 12_第1张图片

class Solution {
    public int maxProfit(int[] prices) {

    int day = prices.length;

    int [][] dp = new int[day][2];
    dp[0][0] = 0; // 0表示不持有股票
    dp[0][1] = -prices[0];

    for(int i=1;i<day;i++){
        dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1]+prices[i]); //不持有股票 1.保持昨天 2.卖掉了昨天
        dp[i][1] = Math.max(dp[i-1][1],(i-2>=0?dp[i-2][0]:0) - prices[i] );
      
   }  
   return dp[day-1][0];
    }
}

方法二:一维数组

class Solution {
    public int maxProfit(int[] prices) {
    
    int buy = Integer.MIN_VALUE; //表示买入时候的最大利润
    int sold =0;  // 表示卖出之后的最大利润
    int cool =0;  // 表示表示冷冻期时间的最大利润

    for(int p :prices){
        buy = Math.max(buy,cool -p);
        cool = Math.max(cool,sold);
        sold =Math.max(sold,buy+p);

    }
    return Math.max(sold,cool);
    }
}

714.买卖股票的最佳时机含手续费

和122提几乎一样

class Solution {
    public int maxProfit(int[] prices, int fee) {
     int day = prices.length;

     int dp[] = new int[2];
     dp[0] = 0;//不持有股票的最大利润
     dp[1] = -prices[0];//持有股票的最大利润

     for(int i=1;i<day;i++){
      dp[0] = Math.max(dp[0],dp[1]+prices[i]-fee);
      dp[1] = Math.max(dp[1],dp[0]-prices[i]);

     }

     return dp[0];
    }
}

你可能感兴趣的:(算法,动态规划)