309. 买卖股票的最佳时机含冷冻期(leetcode) 动态规划思想

这篇具有很好参考价值的文章主要介绍了309. 买卖股票的最佳时机含冷冻期(leetcode) 动态规划思想。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

在本文章中,我们将要详细介绍一下Leetcode中买卖股票的最佳时机含冷冻期相关的内容,本题采用动态规划的思想解决

一、题目分析

309. 买卖股票的最佳时机含冷冻期(leetcode) 动态规划思想,刷题,leetcode,动态规划,算法,c++,职场和发展,蓝桥杯

二、算法原理

1.状态表示

列出dp表,dp表中值的含义是什么
   dp[i]表示第i天之后此时的最大利润
由于第i天不确定具体状态,多状态dp问题
    🌟 .dp[i][0]:手中有股票没有卖出,我们简单称为买入状态,此时的最大利润
    🌟 .dp[i][1]:处于冷冻期,无法购买股票,我们称为冷冻期,此时的最大利润
    🌟 .dp[i][2]:手中没有股票,也不处于冷冻期,此时的最大利润

2.状态转移方程

根据最近一步划分问题

根据状态表示,我们可以划分为9种不同的转换
    🌟 .(i-1)天处于买入状态,第i天处于买入状态:这个是可以的,这一天啥也不干
    🌟 .(i-1)天处于买入状态,第i天处于冷冻期状态:这个可以,就是这天把股票卖了,赚了钱,需要加上prices[i]的值(涉及利润)
    🌟 .(i-1)天处于买入状态,第i天处于正常状态:这个不可以,你手中有股票,不处于正常状态,即使把股票卖了,也得先经过冷冻期才可以
    🌟 .(i-1)天处于冷冻期状态,第i天处于冷冻期状态:这个不可以,冷冻期只能有一天
    🌟 .(i-1)天处于冷冻期状态,第i天处于买入状态:这个不可以,冷冻期是不能买股票的
    🌟 .(i-1)天处于冷冻期状态,第i天处于正常状态:这个可以,经过一天之后进入正常状态。
    🌟 .(i-1)天处于正常状态,第i天处于正常状态:这个可以,感觉这个股票不好,等一等再买
    🌟 .(i-1)天处于正常状态,第i天处于买入状态:这个可以,可以进行购买股票,买股票需要花钱,需要减去股票的钱pricesi
    🌟 .(i-1)天处于正常状态,第i天处于冷冻期状态:这个不可以,冷冻期是在股票卖了之后才进入的

下面有个简图描述上面信息
309. 买卖股票的最佳时机含冷冻期(leetcode) 动态规划思想,刷题,leetcode,动态规划,算法,c++,职场和发展,蓝桥杯
箭头方向表示:从(i-1)天到第i天

3.初始化+边界条件

本题初始化比较简单,不需要创建虚拟节点了
dp[0][0]=-prices[0];这一天只买了股票,买是需要花钱的
dp[0][1]=0;买了有紧接着卖了,没有利润
dp[0][2]=0;

4.填表顺序

从左往右

5.返回值是什么

最后一天的最大收益有两种可能,而且一定是“不持有”状态下的两种可能,把这两种“不持有”比较一下大小,返回即可
max(dp[n-1][1],dp[n–1][2]);

三、代码实现

class Solution {
public:
    int maxProfit(vector<int>& prices) 
    {
        //建表
        int n=prices.size();
        if(n==0)
        {
            return 0;
        }
        vector<vector<int>>dp (n,vector<int>(3));
        //初始化
        dp[0][0]=-prices[0];
        dp[0][1]=0;
        dp[0][2]=0;
        //填表
        for(int i=1;i<n;i++)
        {
            dp[i][0]=max(dp[i-1][0],dp[i-1][2]-prices[i]);
            dp[i][1]=dp[i-1][0]+prices[i];
            dp[i][2]=max(dp[i-1][2],dp[i-1][1]);
        }
        //返回值
        return max(dp[n-1][1],dp[n-1][2]);
    }
};

309. 买卖股票的最佳时机含冷冻期(leetcode) 动态规划思想,刷题,leetcode,动态规划,算法,c++,职场和发展,蓝桥杯

总结

以上就是我们对本题详细介绍,希望对大家的学习有所帮助,仅供参考 如有错误请大佬指点我会尽快去改正 欢迎大家来评论~~😘😘😘😘文章来源地址https://www.toymoban.com/news/detail-775846.html

到了这里,关于309. 买卖股票的最佳时机含冷冻期(leetcode) 动态规划思想的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 力扣 -- 309. 最佳买卖股票时机含冷冻期

     题目链接:309. 最佳买卖股票时机含冷冻期 - 力扣(LeetCode) 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。   参考代码:  以上就是用动态规划的思想分析这道题目的整个过程啦,你学会了吗?如果以上题解对你有

    2024年02月13日
    浏览(30)
  • 力扣 309. 买卖股票的最佳时机含冷冻期

    题目来源:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/ C++题解:动态规划 状态1:表示持有股票。更新为之前持有股票(dp[i-1][0])或者不持有股票且不处于冷冻期后买入(dp[i-1][2]-prices[i])。 状态2:表示不持有股票且处于冷冻期,即卖出。更新为持有

    2024年02月22日
    浏览(26)
  • 【第51天| 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费 】

    三个状态: 1. 当前持有股票 状态1 2. 当前不持有股票,且不是今天卖出的股票 状态2 3. 当前不持有股票, 且股票是今天卖出的 状态3 题目要求前一天卖出了股票今天就不能买。所以今天持有股票 状态1 一定是昨天的 状态2 在今天买了股票,或者就是保持了昨天的 状态1 。 状

    2024年02月08日
    浏览(31)
  • dp算法 力扣309最佳买卖股票时机含冷冻期

    给定一个整数数组prices,其中第  prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 注意:你不能同时参与多笔交

    2024年02月14日
    浏览(29)
  • 【学会动态规划】最佳买卖股票时机含冷冻期(15)

    目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 学习一个算法没有捷径,更何况是学习动态规划, 跟我一起刷动态规划算法题,一起学会动态规划! 题目链接:309. 最佳买卖股票时机含冷冻

    2024年02月14日
    浏览(42)
  • 动态规划--买卖股票含冷冻期309

            这道题很明显下一天的利润需要由上一天的状态推导出来,所以这是很明显的动态规划问题         普通的股票问题有两种状态:持有股票的利润,不持有股票的利润,但这道题有一个冷冻期,使得这道题有4种状态:         1、 持有股票的利润 ;         

    2024年04月28日
    浏览(25)
  • 【LeetCode】买卖股票的最佳时机含冷冻期

    链接: 买卖股票的最佳时机含冷冻期 题目描述 算法分析 程序设计

    2024年02月13日
    浏览(27)
  • LeetCode:121.买卖股票的最佳时机——动态规划

    🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 关于动态规划:LeetCode:322. 零钱兑换——动态规划从案例入门 题目描述 :给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只

    2023年04月17日
    浏览(26)
  • 动态规划 Leetcode 714 买卖股票的最佳时机含手续费

    Leetcode 714 学习记录自代码随想录 要点:1.两种状态持有股票和不持有股票; 2.递推公式 d p [ i ] [ 0 ] = m a x ( d p [ i − 1 ] [ 0 ] , d p [ i − 1 ] [ 1 ] − p r i c e s [ i ] ) d p [ i ] [ 1 ] = m a x ( d p [ i − 1 ] [ 1 ] , d p [ i − 1 ] [ 0 ] + p r i c e s [ i ] − f e e ) dp[i][0] = max(dp[i-1][0], dp[i-1][1]-prices

    2024年04月09日
    浏览(33)
  • 算法[动态规划]---买卖股票最佳时机

    1、题目: 给你一个整数数组 prices,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持一股股票。你也可以先购买,然后在同一天出售。 返回你能获得的最大利润 。 2、 分析特点: 题目要求:在任何时候最多

    2024年02月09日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包