LeetCode309:买卖股票的最佳时机含冷冻期

题目链接:309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode)

代码如下

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int len = prices.size();
        if(len == 0)    return 0;
        vector<vector<int> > dp(len, vector<int>(4, 0));
        //dp[i][0]持有股票状态
        //dp[i][1]保持卖出股票状态
        //dp[i][2]卖出股票状态
        //dp[i][3]冷冻期
        //dp[i][0] = max(dp[i - 1][0], dp[i - 1] - price[i], dp[i - 1][3] - price[i]);
        //dp[i][1] = max(dp[i - 1][1], dp[i - 1][3]);
        //dp[i][2] = dp[i - 1][0] + price[i];
        //dp[i][3] = dp[i - 1][2];
        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]));
    }
};

这个题目就是需要把冷冻期也算作是一个状态,然后把卖出的情况再分成两个状态,总共四个状态,这个时候就是需要我们去分析每个状态的状态转移方程

dp的含义

//dp[i][0]持有股票状态

//dp[i][1]保持卖出股票状态

//dp[i][2]卖出股票状态

//dp[i][3]冷冻期

状态转移方程

//dp[i][0] = max(dp[i - 1][0], dp[i - 1] - price[i], dp[i - 1][3] - price[i]);

这个我们可以这么来看,就是我持有这个股票,那我前一天可以是持有,但我此时需要减去当前我买去这个股票的现金,第二个就是我们的股票是不是前一天也可能是卖出股票的状态,这个时候就是我们需要在保持卖出股票的状态减去现金,其次是不是我们也有可能在冷冻期的时候,也就是过完冷冻期刚好这一天,我给买下了这个股票,然后减去现金

//dp[i][1] = max(dp[i - 1][1], dp[i - 1][3]);

这个第一种就是我们卖出股票的状态前一天也可以是保持卖出的,第二种就是我们也可以保持卖出股票之前是在冷冻期的时候。

//dp[i][2] = dp[i - 1][0] + price[i];

这个就是我们这一天卖出了,那么前一天肯定是买入的减去现金

//dp[i][3] = dp[i - 1][2];

这个就是我们的冷冻期,冷冻期的前一天肯定是卖出股票的状态的,因为卖出这个股票了,立马进入冷冻期了。

初始化:

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

这个其实很好理解,因为你想要持有,那么就要减去这个现金数

dp[0][1] = 0

这个也很好理解,因为当前这个状态是你保持卖出这个股票,你肯定不会去做亏本买卖吧,所以你肯定是赚钱的数量大于等于0,初始化为0就好

dp[0][2] = 0;

以此类推

dp[0][3] = 0;

以此类推

返回值;

这个为什么返回是这三个取最大值呢,有可能我这个冷冻期持续到我结束,也有可能我保持卖出股票持续要结束,也有可能我最后一天就是卖出这个股票了。

相关推荐
EterNity_TiMe_13 分钟前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
机器学习之心24 分钟前
一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测
算法·lstm·transformer·北方苍鹰算法优化·多变量回归预测·ngo-transformer
yyt_cdeyyds34 分钟前
FIFO和LRU算法实现操作系统中主存管理
算法
alphaTao1 小时前
LeetCode 每日一题 2024/11/18-2024/11/24
算法·leetcode
kitesxian1 小时前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
VertexGeek2 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
石小石Orz2 小时前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
jiao_mrswang3 小时前
leetcode-18-四数之和
算法·leetcode·职场和发展
qystca3 小时前
洛谷 B3637 最长上升子序列 C语言 记忆化搜索->‘正序‘dp
c语言·开发语言·算法
薯条不要番茄酱3 小时前
数据结构-8.Java. 七大排序算法(中篇)
java·开发语言·数据结构·后端·算法·排序算法·intellij-idea