● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费

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

多加条件:卖出之后有一天冷冻期不能买入,即卖出之后至少隔一天才能再买入。

要搞清楚每一天有什么状态:持有股票(已买入)、不持有股票(已卖出)。不持有股票可能是今天当天卖掉了,变成了不持有状态;也有可能是昨天卖掉了,所以今天是冷冻期,不能买入股票;还有可能是前天以及之前就卖掉了,所以今天是冷冻期之后(不包含)还未买入股票的日子。所以不持有股票还应该分为3种情况:今天卖掉、昨天卖掉、前天以及之前卖掉,数组应该是设置为dp[][4]。这4种情况是包含了所有的状态了的,顺序地组成了买入再卖出然后经过冷冻期的一个周期。

1.dp数组含义。

2.递推公式。4种情况是有些麻烦,今天的每一个情况,都要考虑前一天有没有可能是4种情况的一种,所以有16种组合,筛选后公式如下:

今天持有股票,有可能前一天持有,有可能前一天的昨天卖掉了,有可能前一天的前天以前卖掉了,不可能前一天当天卖掉,所以dp[i][0]=max(dp[i-1][0],max(dp[i-1][2],dp[i-1][3])-prices[i]);

今天当天卖掉了股票,只有可能前一天还持有股票。dp[i][1]=dp[i-1][0]+prices[i];

今天是冷冻期,只有可能前一天当天卖掉了股票。dp[i][2]=dp[i-1][1];

今天是冷冻期之后的日子,前一天可能是冷冻期,或者也是冷冻期之后的日子。所以dp[i][3]=max(dp[i-1][2],dp[i-1][3]);

这里的前一天指i-1坐标(第i天的前一天),昨天、前天指每个dp[i]的4的元素含义。

下面是代码随想录给出的状态转移图。卖出状态就是冷冻期之后的日子,这个图就概括了上面的递推过程。

这4个公式还可以化简,变成2个或者3个状态来递推也正确。

3.初始化。只有持有股票状态初始化为-prices[0],其他3种都是不持有股票状态,所以初始化为0.

4.遍历顺序。从左到右。

5.打印。

代码。最后的状态是手上没有股票,所以得取未持有股票的3种状态的最大值。

class Solution {
public:int maxProfit(vector<int>& prices) {int n=prices.size();vector<vector<int>> dp(n,vector<int>(4,0));dp[0][0]=-prices[0];for(int i=1;i<prices.size();++i){dp[i][0]=max(dp[i-1][0],max(dp[i-1][2],dp[i-1][3])-prices[i]);dp[i][1]=dp[i-1][0]+prices[i];dp[i][2]=dp[i-1][1];dp[i][3]=max(dp[i-1][2],dp[i-1][3]);}return max(max(dp[n-1][1],dp[n-1][2]),dp[n-1][3]);}
};


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

题目与122.买卖股票的最佳时机II相比 ,就是加了一个手续费的问题,那么完成一次买卖,可以是卖一次就减去一次手续费,即最大金额dp[i][1]减去手续费fee;也可以是买一次就减去一次手续费,这样的话注意初始化dp[0][0]是买一次,要减去一个fee。

代码。卖出扣手续费:

class Solution {
public:int maxProfit(vector<int>& prices, int fee) {int n=prices.size();vector<vector<int>> dp(n,vector<int>(2,0));//2种状态dp[0][0]=-prices[0];for(int i=1;i<prices.size();++i){dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]);dp[i][1]=max(dp[i-1][0]+prices[i]-fee,dp[i-1][1]);}return dp[n-1][1];}
};

买入扣手续费:

class Solution {
public:int maxProfit(vector<int>& prices, int fee) {int n=prices.size();vector<vector<int>> dp(n,vector<int>(2,0));//2种状态dp[0][0]=-prices[0]-fee;for(int i=1;i<prices.size();++i){dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]-fee);dp[i][1]=max(dp[i-1][0]+prices[i],dp[i-1][1]);}return dp[n-1][1];}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/525345.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity DropDown 组件 详解

Unity版本 2022.3.13f1 Dropdown下拉菜单可以快速创建大量选项 一、 Dropwon属性详解 属性&#xff1a;功能&#xff1a;Interactable此组件是否接受输入&#xff1f;请参阅 Interactable。Transition确定控件以何种方式对用户操作进行可视化响应的属性。请参阅过渡选项。Nav…

数据分析-Pandas最简单的方法画矩阵散点图

数据分析-Pandas直接画矩阵散点图 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&…

idea连接远程服务器

1. 双击shift&#xff0c;出现如下界面 2. 远程连接 原文来自这个up主的&#xff0c;点击蓝色字体就可以跳转啦&#xff01; 输入主机ip、用户名、密码&#xff0c;点击Test Connection验证&#xff0c;最后点击ok添加成功 有用的话记得给俺点个赞&#xff0c;靴靴~

YOLOX论文解读

paper&#xff1a;YOLOX: Exceeding YOLO Series in 2021 official implementation&#xff1a;https://github.com/Megvii-BaseDetection/YOLOX 本文的创新点 本文在YOLOv3的基础上进行了一些改进&#xff1a;包括将检测头进行解耦的decoupled head、从anchor-based转为anc…

成人商务英语,外贸英语纺织英语日常交流口语柯桥学外语

大家好&#xff0c;今天我们要说的这个短语&#xff0c;跟香蕉Banana有关&#xff0c;它就是top banana。 不过它可不是字面上的“顶级香蕉”的意思哦~ Top banana是一个俚语&#xff0c;常见的意思有两个&#xff1a; 1. the most important person in any group 一群人中最…

科技引领品质:飞利浦智能锁“12年免费换新机”重塑行业新标杆

随着智能锁行业的竞争愈发火热&#xff0c;各大品牌在技术创新和服务升级方面不断推陈出新。售后服务的形态正发生深刻变化&#xff0c;从传统的保修维修到如今的技术支持、24小时在线客服等&#xff0c;各大品牌都在不断地提升售后服务水平&#xff0c;以创新的服务理念和先进…

计算机设计大赛 深度学习的动物识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

elasticsearch篇

1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在电商网站搜索商品 在百度搜索答案 在打车软件搜索附近…

人力资源社会保障部教育部关于印发《关于深化中小学教师职称制度改革的指导意见》的通知

人力资源社会保障部、教育部印发 关于《深化中小学教师职称制度改革的指导意见》的通知 人社部发[2015]79号 各省、自治区、直辖市及新疆生产建设兵团人力资源社会保障厅&#xff08;局&#xff09;、教育部门&#xff08;教委、教育局&#xff09;&#xff1a; 为深化教育…

ospf静态路由实验简述

1、ospf静态路由实验简述 实验拓扑图 实验命令 r2: sys sysname r2 undo info enable int loopb 0 ip add 2.2.2.2 32 quit int e0/0/0 ip add 23.1.1.2 24 quit ospf 1 area 0 network 23.1.1.0 0.0.0.255 network 2.2.2.2 0.0.0.0 ret r3: sys sysname r3 undo info enable …

音视频开发_音频基础知识

如何采集声音——模数转换原理 声音模数转换是将声音信号从模拟形式转换为数字形式的过程。它是数字声音处理的基础&#xff0c;常用于语音识别、音频编码等应用中。 音视频通信流程 音视频采集&#xff1a;首先是从麦克风、摄像头等设备中采集音频和视频数据&#xff0c;将现…

ESP8266程序烧录方法(以ESPFlashDownloadTool为例)

0 工具准备 ESP8266必须包含的目标bin ESPFlashDownloadTool_v3.6.3.exe NodeMCU&#xff08;ESP8266&#xff09; sscom5 1 ESP8266程序烧录方法&#xff08;以ESPFlashDownloadTool为例&#xff09; 1.1 生成ESP8266所需的bin文件 可以参考前面所写的《安信可IDE&#xff0…