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

LeetCode--买卖股票的最佳时机含冷冻期--动态规划

一、题目解析

二、算法原理

 我们可以使用dp[i]来表示第i天买卖股票所获得的最大利润。由题可得我们只能持有一支股票,并且在卖出后有冷冻期的限制,因此我们会有三种不同的状态:

我们目前持有一支股票,对应的「累计最大收益」记为 dp[i][0];

我们目前不持有任何股票,并且处于冷冻期中,对应的「累计最大收益」记为 dp[i][1];

我们目前不持有任何股票,并且不处于冷冻期中,对应的「累计最大收益」记为 dp[i][2]。

对于 dp[i][0],我们目前持有的这一支股票可以是在第 i−1 天就已经持有的,对应的状态为 dp[i−1][0];或者是第 i 天买入的,那么第 i−1 天就不能持有股票并且不处于冷冻期中,对应的状态为 dp[i−1][2] 加上买入股票的负收益 prices[i]。因此状态转移方程为:

dp[i][0]=max(dp[i−1][0],dp[i−1][2]−prices[i])

对于 dp[i][1],我们在第 i 天结束之后处于冷冻期的原因是在当天卖出了股票,那么说明在第 i−1 天时我们必须持有一支股票,对应的状态为 dp[i−1][0] 加上卖出股票的正收益 prices[i]。因此状态转移方程为:

dp[i][1]=dp[i−1][0]+prices[i]

对于 dp[i][2],我们在第 i 天结束之后不持有任何股票并且不处于冷冻期,说明当天没有进行任何操作,即第 i−1 天时不持有任何股票:如果处于冷冻期,对应的状态为 f[i−1][1];如果不处于冷冻期,对应的状态为 dp[i−1][2]。因此状态转移方程为:

dp[i][2]=max(dp[i−1][1],dp[i−1][2])

由于我们要想所获利润最大化则最后一天后一定不持有股票则 max(dp[n-1][1],dp[n-1][2])即为所求。

三、代码解析

 

 

 

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

相关文章:

  • 装了Ubuntu和Windows双系统,如何设置默认启动Windows
  • WPF+MVVM案例实战-设备状态LED灯变化实现
  • MySQL--基本介绍
  • PAT甲级1008 Elevator
  • 数据导入导出
  • git的安装以及入门使用
  • 【acwing】算法基础课-搜索与图论
  • 502 错误码通常出现在什么场景?
  • 面试经典算法题69-两数之和
  • 在 Spring 框架中,循环依赖是指两个或多个 Bean 之间相互依赖
  • 一文带你入门Flink CDC
  • 修复jenkins SSH 免密登录发布服务器
  • 049_python基于Python的热门微博数据可视化分析
  • 中国信通院联合中国电促会开展电力行业企业开源典型实践案例征集
  • LOAM 20.04 ros1安装
  • Pyqt5设计打开电脑摄像头+可选择哪个摄像头(如有多个)
  • mysqldump 批量导出数据库表
  • 前端工程师面试题整理
  • Linux 权限的理解
  • 『完整代码』按钮开关UI界面
  • 梦结束的地方 -- 爬楼梯
  • 身份证识别JAVA+OPENCV+OCR
  • 独立开发者如何利用AI实现高收入
  • Go第三方框架--gorm框架(一)
  • ONLYOFFICE文档8.2:开启无缝PDF协作
  • 内网python smtplib用ssh隧道通过跳板机发邮件
  • 基于C#开发游戏辅助工具的Windows底层相关方法详解
  • SSRF+Redis进行内网渗透
  • 栈与队列-Java【力扣】【算法学习day.7】
  • 最新版本!IntelliJ IDEA 2024.2.4 (Ultimate Edition) 的新特性