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

简单多状态dp第三弹 leetcode -买卖股票的最佳时机问题


 

309. 买卖股票的最佳时机含冷冻期

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

分析:

使用动态规划解决

状态表示:

由于有「买入」「可交易」「冷冻期」三个状态,因此我们可以选择用三个数组,其中:
dp[i][0] 表示:第 i 天结束后,处于「买入」状态,此时的最大利润。
dp[i][1] 表示:第 i 天结束后,处于「可交易」状态,此时的最大利润。
dp[i][2] 表示:第 i 天结束后,处于「冷冻期」状态,此时的最大利润。

状态转移方程:

1.处于买入状态的时候,我们现在有股票,此时不能买股票,只能继续持有股票,或者卖
出股票;

2.处于卖出状态的时候:

如果在冷冻期,不能买入。

如果 不在冷冻期,才能买入。

画出状态图

根据状态图可以得出:

买入->买入:什么都不干

买入->卖出:买入股票

对应代码:a[i]=max(a[i-1],c[i-1]-prices[i-1]);

卖出->卖出:什么都不干

卖出->冷冻期:卖出股票

对应代码:b[i]=max(b[i-1],a[i-1]+prices[i-1]);

冷冻期->冷冻期:什么都不干

冷冻期->买入:冷冻期结束

对应代码:c[i]=max(c[i-1],b[i-1]);

代码:

class Solution {
public:int maxProfit(vector<int>& prices) {int n=prices.size();vector<int>a(n+1);//买入vector<int>b(n+1);//卖出vector<int>c(n+1);//冷冻a[0]-=prices[0];for(int i=1;i<=n;i++){a[i]=max(a[i-1],c[i-1]-prices[i-1]);b[i]=max(b[i-1],a[i-1]+prices[i-1]);c[i]=max(c[i-1],b[i-1]);}return max(b[n],c[n]);//从卖出和冷冻期中选出最大值,因为买入状态肯定不是最大值,因为还有股票没有卖出。}
};


714. 买卖股票的最佳时机含手续费

 买卖股票的最佳时机含手续费

分析:

使用动态规划解决

 

与 买卖股票的最佳时机含冷冻期 问题相似,我们直接画出状态图写状态方程。

状态图:

 

买入->买入:什么都不干

买入->卖出:买入股票

对应代码:a[i]=max(a[i-1],c[i-1]-prices[i-1]);

卖出->卖出:什么都不干

卖出->买入:卖出股票并支付手续费

对应代码:b[i]=max(b[i-1],a[i-1]+prices[i-1]-fee);

代码:

class Solution {
public:int maxProfit(vector<int>& prices, int fee) {int n=prices.size();vector<int>a(n+1);//买入vector<int>b(n+1);//卖出a[0]-=prices[0];for(int i=1;i<=n;i++){a[i]=max(a[i-1],b[i-1]-prices[i-1]);b[i]=max(b[i-1],a[i-1]+prices[i-1]-fee);}return b[n];}
};


123. 买卖股票的最佳时机 III

买卖股票的最佳时机 III

状态表示:

这里我们选择比较常用的方式,以某个位置为结尾,结合题目要求,定义一个状态表示:
由于有「买入」「可交易」两个状态,因此我们可以选择用两个数组。但是这道题里面还有交易次
数的限制,因此我们还需要再加上一维,用来表示交易次数。其中:

▪ f[i][j] 表示:第 i 天结束后,完成了 j 次交易,处于「买入」状态,此时的最大利
润;
▪ g[i][j] 表示:第 i 天结束后,完成了 j 次交易,处于「卖出」状态,此时的最大利
润。

状态转移方程:
 

A.对于 f[i][j] ,我们有两种情况到这个状态:


1. 在 i - 1 天的时候,交易了 j 次,处于「买入」状态,第 i 天啥也不干即可。此时最
大利润为: f[i - 1][j] ;


2. 在 i - 1 天的时候,交易了 j 次,处于「卖出」状态,第 i 天的时候把股票买了。此
时的最大利润为: g[i - 1][j] - prices[i] 。


综上,我们要的是「最大利润」,因此是两者的最大值: f[i][j] = max(f[i - 1][j],
g[i - 1][j] - prices[i]) 。

B.对于 g[i][j] ,我们也有两种情况可以到达这个状态:


1.在 i - 1 天的时候,交易了 j 次,处于「卖出」状态,第 i 天啥也不干即可。此时的
最大利润为: g[i - 1][j] ;


2.在 i - 1 天的时候,交易了 j - 1 次,处于「买入」状态,第 i 天把股票卖了,然
后就完成了 j 比交易。此时的最大利润为: f[i - 1][j - 1] + prices[i] 。但
是这个状态不一定存在,要先判断一下。

综上,我们要的是最大利润,因此状态转移方程为:
g[i][j] = g[i - 1][j];
if(j >= 1) g[i][j] = max(g[i][j], f[i - 1][j - 1] + prices[i]);

代码:

class Solution {
public:int maxProfit(vector<int>& prices) {const int INF=0x3f3f3f3f;int n=prices.size();vector<vector<int>>f(n+1,vector<int>(3,-INF));//买vector<vector<int>>g(n+1,vector<int>(3,-INF));//卖f[0][0]=-prices[0];g[0][0]=0;for(int i=1;i<n;i++){for(int j=0;j<3;j++){f[i][j]=max(f[i-1][j],g[i-1][j]-prices[i]);g[i][j]=g[i-1][j];if(j-1>=0){g[i][j]=max(g[i][j],f[i-1][j-1]+prices[i]);}}}int ans=0;for(int i=0;i<3;i++){ans=max(ans,g[n-1][i]);}return ans;}
};

 

相关文章:

简单多状态dp第三弹 leetcode -买卖股票的最佳时机问题

309. 买卖股票的最佳时机含冷冻期 买卖股票的最佳时机含冷冻期 分析: 使用动态规划解决 状态表示: 由于有「买入」「可交易」「冷冻期」三个状态&#xff0c;因此我们可以选择用三个数组&#xff0c;其中&#xff1a; ▪ dp[i][0] 表示&#xff1a;第 i 天结束后&#xff0c…...

游戏化在电子课程中的作用:提高参与度和学习成果

游戏化&#xff0c;即游戏设计元素在非游戏环境中的应用&#xff0c;已成为电子学习领域的强大工具。通过将积分、徽章、排行榜和挑战等游戏机制整合到教育内容中&#xff0c;电子课程可以变得更具吸引力、激励性和有效性。以下是游戏化如何在转变电子学习中发挥重要作用&#…...

php+mysql安装

1.卸载mysql 没启动不停止 2.下载 3.解压 4.点击安装 5.出现成功 端口占用修改 修改端口89或者87 可视化扩展 修改后重启 开启扩展...

音视频入门基础:FLV专题(5)——FFmpeg源码中,判断某文件是否为FLV文件的实现

一、引言 通过FFmpeg命令&#xff1a; ./ffmpeg -i XXX.flv 可以判断出某个文件是否为FLV文件&#xff1a; 所以FFmpeg是怎样判断出某个文件是否为FLV文件呢&#xff1f;它内部其实是通过flv_probe函数来判断的。从《FFmpeg源码&#xff1a;av_probe_input_format3函数和AVI…...

Tomcat 乱码问题彻底解决

1. 终端乱码问题 找到 tomcat 安装目录下的 conf ---> logging.properties .修改ConsoleHandler.endcoding GBK &#xff08;如果在idea中设置了UTF-8字符集&#xff0c;这里就不需要修改&#xff09; 2. CMD命令窗口设置编码 参考&#xff1a;WIN10的cmd查看编码方式&am…...

RGB颜色模型

RGB颜色模型是一种广泛应用于数字图像和计算机图形领域的颜色表示方法 一、基本概念 RGB 代表红色&#xff08;Red&#xff09;、绿色&#xff08;Green&#xff09;和蓝色&#xff08;Blue&#xff09;三种基本颜色。这些颜色被视为加色模型中的原色&#xff0c;意味着它们可…...

智能工厂的软件设计 创新型原始制造商(“创新工厂“)的Creator原型(统一行为理论)之2

Q8、今天我们继续昨天开始的 “智能工厂的软件设计”以“统一行为理论”为指导原则的 创新型原始制造商的Creator伪代码--创新工厂“原型”。这是在前述将“程序program”问题的三个体现“方面”&#xff08;逻辑/语言/数学&#xff09; 视为符号学的三分支&#xff08;语用语义…...

【个人博客hexo版】hexo安装时会出现的一些问题

项目场景&#xff1a; 项目场景&#xff1a;在完成了GitHub仓库和git的连接之后&#xff0c;就要新建一个文件夹&#xff08;例如hexo blog&#xff09;进行下一步hexo的使用 问题描述 例如&#xff1a;如图所示 原因分析&#xff1a; 这些error不用看它到底是什么&#xf…...

道路裂缝,坑洼,病害数据集-包括无人机视角,摩托车视角,车辆视角覆盖道路

道路裂缝&#xff0c;坑洼&#xff0c;病害数据集 包括无人机视角&#xff0c;摩托车视角&#xff0c;车辆视角 覆盖道路所有问题 一共有八类16000张 1到7依次为: [横向裂缝, 纵向裂缝, 块状裂缝, 龟裂, 坑槽, 修补网状裂缝, 修补裂缝, 修补坑槽] 道路病害&#xff08;如裂缝、…...

java接口文档配置

接口文档配置 一. swagger与knife4j 配置 1. 导入依赖 <!--swagger接口文档说明--> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId> </dependency> <dependency><groupId>…...

【服务器第二期】mobaxterm软件下载及连接

【服务器第二期】mobaxterm软件下载及连接 前言什么是SSH什么是FTP/SFTP mobaxterm软件介绍mobaxterm软件下载SSH登录使用方法1-新建ssh连接方法2-打开已有的ssh连接方法3-通过ssh命令建立连接 SFTP数据传输方法1-建立ssh连接后直接拖拽方法2-建立sftp连接再拖拽方法3-直接使用…...

排序-----计数排序(非比较排序)

原理&#xff1a; 存在的问题&#xff1a;数组空间浪费 所以要相对映射&#xff0c;不要绝对映射 calloc()函数的功能是:为num个大小为size的元素开辟一块空间,并且把空间的每个字节初始化为0. // 时间复杂度:O(Nrange) // 只适合整数/适合范围集中 // 空间范围度&#xff1a;…...

[Python]案例驱动最佳入门:Python数据可视化在气候研究中的应用

在全球气候问题日益受到关注的今天&#xff0c;气温变化成为了科学家、政府、公众讨论的热门话题。然而&#xff0c;全球气温究竟是如何变化的&#xff1f;我们能通过数据洞察到哪些趋势&#xff1f;本文将通过真实模拟的气温数据&#xff0c;结合Python数据分析和可视化技术&a…...

PyQt5 导入ui文件报错 AttributeError: type object ‘Qt‘ has no attribute

问题描述&#xff1a; 利用 PyQt5 编写可视化界面是较为普遍的做法&#xff0c;但是使用全新UI版本的 Pycharm 修改之前正常的UI文件时&#xff0c;在没有动其他代码的情况下发现出现以下报错 AttributeError: type object Qt has no attribute Qt::ContextMenuPolicy::Defaul…...

Unity中Rigidbody 刚体组件和Rigidbody类是什么?

Rigidbody 刚体组件 Rigidbody 是 Unity 中的一个组件&#xff0c;它可以让你的游戏对象像真实世界中的物体一样移动和碰撞。想象一下&#xff0c;你有一个小球&#xff0c;你希望它像真实世界中的球一样滚动、弹跳和碰撞&#xff0c;那么你就可以给这个小球添加一个 Rigidbod…...

MySQL学习笔记(持续更新中)

1、Mysql概述 1.1 数据库相关概念 三个概念&#xff1a;数据库、数据库管理系统、SQL 名称全称简称数据库存储数据的仓库&#xff0c;数据是有组织的进行存储DataBase&#xff08;DB&#xff09;数据库管理系统操纵和管理数据库的大型软件DataBase Mangement System&#xf…...

sqlserver插入数据删除数据

1、插入数据 1.1 直接插入 1.1.1 方式一 insert into test values(001,黎明,1),(002,冯绍峰,1),(003,菲菲,2);1.1.2 方式二 insert into test(ID,Name,Sex) values(004,丽丽,2),(005,凌晨,2),(006,虾米,1);1.2 插入部分行 insert into test(ID,Name) values(007,红)2、删除…...

[51单片机] 简单介绍 (一)

文章目录 1.单片机介绍2.单片机内部三大资源3.单片机最小系统4.STC89C52单片机 1.单片机介绍 兼容Intel的MCS-51体系架构的一系列单片机。 STC89C52&#xff1a;8K FLASH、512字节RAM、32个IO口、3个定时器、1个UART、8个中断源。 单片机简称MCU单片机内部集成了CPU、RAM、RO…...

6个岗位抢1个人,百万年薪抢毕业生?大厂打响AI人才战

前言 “24岁毕业时年薪50万元&#xff0c;到了30岁大概能升到P7(注&#xff1a;职级名称&#xff09;&#xff0c;那时就能年薪百万了。” 从上海交大硕士毕业后&#xff0c;出生于2000年的赵宏在今年入职腾讯&#xff0c;担任AI算法工程师&#xff0c;成为AI风口下第一批就业…...

erlang学习:Linux命令学习3

shell基本输出 创建一个test.sh文件&#xff0c;并开放他的权限&#xff0c;之后向其中编辑以下内容 touch test.sh chmod 777 test.sh vim test.shecho "hello linux"之后运行相应shell程序得到输出 ./test.sh变量 单引号特点&#xff1a; 单引号里的任何字符都…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...