当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 一、题目分析
  • 二、算法原理
    • 1.状态表示
    • 2.状态转移方程
    • 3.初始化+边界条件
    • 4.填表顺序
    • 5.返回值是什么
  • 三、代码实现
  • 总结


前言

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

一、题目分析

在这里插入图片描述

二、算法原理

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天处于冷冻期状态:这个不可以,冷冻期是在股票卖了之后才进入的

下面有个简图描述上面信息
在这里插入图片描述
箭头方向表示:从(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]);}
};

在这里插入图片描述

总结

以上就是我们对本题详细介绍,希望对大家的学习有所帮助,仅供参考 如有错误请大佬指点我会尽快去改正 欢迎大家来评论~~😘😘😘😘

http://www.lryc.cn/news/257534.html

相关文章:

  • 3D渲染和动画制作软件KeyShot Pro mac附加功能
  • 集合的几个遍历方法
  • 【使用apache snakeyaml 管理yml文件】
  • uniapp - 简单版本自定义tab栏切换
  • 工作中常用的RabbitMQ实践
  • 程序员常用英文单词
  • QStringListModel 是 Qt 框架中用于在模型-视图(Model-View)架构中展示字符串列表的类
  • vue使用echarts显示中国地图
  • ATM的转账
  • 在Windows 10或11中,复制和粘贴不起作用,不一定是键盘的问题
  • git 使用记录
  • 支持大模型训练的计算机系统
  • SAP ABAP-AVL-OO方法中的ALV的如何自己添加按钮及其响应
  • uniapp移动端悬浮按钮(吸附边缘)
  • 【成功】Linux安装Mysql8并设置远程连接
  • 高效纯化树脂A-2313 CPR
  • uni-app实现安卓原生态调用身份证阅读器读卡库读身份证和社保卡、银行卡、IC卡等功能
  • 【QT】QComboBox和QPlainTextEdit基本介绍和应用示例
  • Path的使用-path绘制折线的时候带上圆角
  • Go Fyne 入门
  • 如何为游戏角色3D模型设置纹理贴图
  • 2024 年 SEO 现状
  • Mac虚拟机CrossOver23破解版下载和许可证下载
  • 宝藏级实用工具,制作电子书轻而易举
  • 虚拟局域网(VLAN)解析(Virtual Local Area Network)(用于在不受物理位置限制的情况下将设备划分到同一网络或不同网络)
  • uni-app 微信小程序之好看的ui登录页面(四)
  • 解决火狐浏览器拖拽事件打开新页面的问题
  • 以为回调函数是同步的(js的问题)
  • 如何在小米路由器4A千兆版刷入OpenWRT并通过内网穿透工具实现公网远程访问
  • diffusers pipeline拆解:理解pipelines、models和schedulers