算法题打卡day51-股票问题 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

309.最佳买卖股票含冷冻期 
状态:Debug后AC

需要添加一个冷冻期状态和一个表示冷冻期状态的今天卖出不持有状态。代码如下:

class Solution {
public:
    int maxProfit(vector& prices) {
        int len = prices.size();
        vector> dp(len, vector(4, 0));
        dp[0][0] = -prices[0];
        for(int i = 1; i < len; ++i){
            dp[i][0] = max(dp[i-1][0], max(dp[i-1][1]-prices[i], dp[i-1][3]-prices[i]));
            dp[i][1] = max(dp[i-1][1], dp[i-1][3]);
            dp[i][2] = dp[i-1][0] + prices[i];
            dp[i][3] = dp[i-1][2];
        }
        return max(dp[len-1][1], max(dp[len-1][2], dp[len-1][3]));
    }
};

714.买卖股票的最佳时机含手续费
状态:Debug后AC

和股票问题二一样,区别在于卖出股票需要交手续费,所以最后的答案就不一定是dp[len-1][1](卖出),因为可能存在手续费高于收益的情况,所以最终答案需要比较。代码如下:

class Solution {
public:
    int maxProfit(vector& prices, int fee) {
        int len = prices.size();
        vector> dp(len, vector(2, 0));
        dp[0][0] = 0, dp[0][1] = -prices[0];
        for(int i = 1; i < len; ++i){
            dp[i][0] = max(dp[i-1][0], dp[i-1][1]+prices[i]-fee);
            dp[i][1] = max(dp[i-1][1], dp[i-1][0]-prices[i]);
        }
        return max(dp[len-1][0], dp[len-1][1]);
    }
};

你可能感兴趣的:(算法)