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

文章目录

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

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

注意的点:

  1. 这道题是在买入的时候给出限制条件
  2. 买入的比较变成了在前两天无股票价值的基础上减去当天的买入价格与前一天有股票价值比较。
			//如果i等于1,就不能再次买入股票,只能是延续前一天的情况
            //踩坑: 这里 0 也要减去price[i]
            if( i == 1){
                dp[i][1] = Math.max(dp[i-1][1], 0 - prices[i]);
                continue;
            }

            //只有当i大于等于2,才有资格再次买入股票
            //当天有股票
            dp[i][1] = Math.max(dp[i-1][1], dp[i-2][0] - prices[i]);

以下是代码部分:

public class 最佳买卖股票时机含冷冻期309 {

    public int maxProfit(int[] prices) {

        int[][] dp = new int[prices.length][2];

        dp[0][0] = 0;
        dp[0][1] = -prices[0];

        //买入受限,但是卖出与原来一样
        for (int i = 1; i < prices.length; i++) {
            //当天没有股票
            dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1] + prices[i]);

            //如果i等于1,就不能再次买入股票,只能是延续前一天的情况
            //踩坑: 这里 0 也要减去price[i]
            if( i == 1){
                dp[i][1] = Math.max(dp[i-1][1], 0 - prices[i]);
                continue;
            }

            //只有当i大于等于2,才有资格再次买入股票
            //当天有股票
            dp[i][1] = Math.max(dp[i-1][1], dp[i-2][0] - prices[i]);

        }

        return dp[prices.length-1][0];
    }
}

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

  1. 与上一题不同,这一题是在卖出的时候给出限制条件。
  2. 在卖出股票的时候,要额外减去一个手续费。
			//没有股票
            dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1] + prices[i] - fee);

以下是代码部分:

public class 买卖股票的最佳时机含手续费 {

    //在买入不受限,但在卖出受限,会多减去一个fee
    public int maxProfit(int[] prices, int fee) {

        int[][] dp = new int[prices.length][2];

        dp[0][0] = 0;
        dp[0][1] = -prices[0];

        for (int i = 1; i < prices.length; i++) {
            //没有股票
            dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1] + prices[i] - fee);

            //有股票
            dp[i][1] = Math.max(dp[i-1][1], dp[i-1][0] - prices[i]);
        }

        return dp[prices.length-1][0];
    }
}

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