● 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];
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录 回溯算法-棋盘问题

目录 51.N皇后 37.解数独 51.N皇后 51. N 皇后 困难 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &…

【论文精读】融合知识图谱和语义匹配的医疗问答系统

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

LLM 推理优化探微 (2) :Transformer 模型 KV 缓存技术详解

编者按&#xff1a;随着 LLM 赋能越来越多需要实时决策和响应的应用场景&#xff0c;以及用户体验不佳、成本过高、资源受限等问题的出现&#xff0c;大模型高效推理已成为一个重要的研究课题。为此&#xff0c;Baihai IDP 推出 Pierre Lienhart 的系列文章&#xff0c;从多个维…

世界上最伟大的商业模式是“让利”,总结10套消费返利玩转市场!

文丨微三云营销总监胡佳东&#xff0c;点击上方“关注”&#xff0c;为你分享市场商业模式电商干货。 - 引言&#xff1a;很多企业家朋友说&#xff0c;生意越来越难做了&#xff0c;市场太卷、同行价格低、难招商、难融资、难推广&#xff0c;其实你是不懂“人心”&#xff…

118.龙芯2k1000-pmon(17)-制作ramdisk

目前手上这个设备装系统不容易&#xff0c;总是需要借助虚拟机才能实现。 对生产就不太那么友好&#xff0c;能否不用虚拟机就能装Linux系统呢&#xff1f; 主要是文件系统的问题需要解决&#xff0c;平时我们一般是用nfs挂载后&#xff0c;然后对硬盘格式化&#xff0c;之后…

博特激光——激光打标机工作原理介绍

激光打标机&#xff0c;作为现代标识技术的杰出代表&#xff0c;其工作原理的高效与精确性使得它在众多行业中占据了举足轻重的地位。今天&#xff0c;我们将深入探讨激光打标机的工作原理及其背后的科技魅力。 激光打标机的工作原理主要基于激光的高能量和聚焦特性。首先&…

AI新工具 百分50%算力确达到了GPT-4水平;将音乐轨道中的人声、鼓声、贝斯等音源分离出来等

1: Pi 百分50%算力确达到了GPT-4水平 Pi 刚刚得到了巨大的升级&#xff01;它现在由最新的 LLMInflection-2.5 提供支持&#xff0c;它在所有基准测试中都与 GPT-4 并驾齐驱&#xff0c;并且使用不到一半的计算来训练。 地址&#xff1a;https://pi.ai/ 2: Moseca 能将音乐…

【REST2SQL】12 REST2SQL增加Token生成和验证

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 【RE…

阿里云有免费服务器吗?在哪领?

阿里云服务器免费试用申请链接入口&#xff1a;aliyunfuwuqi.com/go/free 阿里云个人用户和企业用户均可申请免费试用&#xff0c;最高可以免费使用3个月&#xff0c;阿里云服务器网分享阿里云服务器免费试用申请入口链接及云服务器配置&#xff1a; 阿里云免费服务器领取 阿里…

数据结构之deque双端队列

一、概念&#xff1a; 众所周知&#xff0c;数据结构是用来存储数据&#xff0c;deque也不例外&#xff0c;他是集结了队列和栈的性质而成的结构&#xff0c;他几乎拥有所有数据结构能有的操作&#xff0c;看似已经大杀四方&#xff0c;可实际情况如何呢&#xff0c;那就带者这…

ssm+vue的农业信息管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的农业信息管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

C语言第三十七弹---文件操作(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 文件操作 1、文件的随机读写 1.1、fseek 1.2、ftell 1.3、rewind 2、文件读取结束的判定 2.1、被错误使用的 feof 3、文件缓冲区 总结 1、文件的随机读写…

“轻松入门Electron:一步步构建梦想中的桌面软件

在数字化的浪潮中&#xff0c;桌面应用依旧占据着其独特而重要的位置&#xff0c;不论是在企业解决方案、专业工具软件还是个性化应用领域中都是如此。随着技术的演进&#xff0c;创建这些应用的过程已经变得更为简单和可行&#xff0c;尤其是随着Electron等框架的出现。Electr…

启动查看工具总结

启动目标&#xff1a;2s内优秀&#xff0c;2-5s普通&#xff0c;之后的都需要优化&#xff0c;热启动则是1.5s-2s内 1 看下大致串联启动流程&#xff1a; App 进程在 Fork 之后&#xff0c;需要首先执行 bindApplication Application 的环境创建好之后&#xff0c;就开始activ…

Dynamo——常用几何形体的创建与编辑(二)

上一次&#xff0c;我们简单整理了一些创建几何形体的节点用法&#xff0c;今天我们接着整理一些&#xff0c;几何形体的编辑方法。 一、坐标点的平移复制 [Point.Add] 使用节点 “Vector.ByCoordinates” 生成一个向量&#xff0c;将该向量连接到 “Point.Add” 节点的输入端 …

使用R语言进行聚类分析

一、样本数据描述 城镇居民人均消费支出水平包括食品、衣着、居住、生活用品及服务、通信、文教娱乐、医疗保健和其他用品及服务支出这八项指标来描述。表中列出了2016年我国分地区的城镇居民的人均消费支出的原始数据&#xff0c;数据来源于2017年的《中国统计年鉴》&#xf…

点云数据切片及使用threejs加载

测试点云数数据大小 2.94G cesium 加载&#xff1a; 数据处理&#xff1a;cesiumlab 点云切片->cesium 3Dtiles API 加载 threejs 加载 只支持 pcd 格式&#xff0c;故将 lsa 数据导入&#xff0c;在导出为了 pcd&#xff0c;在将数据直接转出 pcd 会直接闪退&#xff0…

HUAWEI 华为交换机 配置 MAC 防漂移 防MAC伪造示例

组网需求 某企业网络中&#xff0c;用户需要访问企业的服务器。如果某些非法用户从其他接口假冒服务器的MAC 地址发送报文&#xff0c;则服务器的 MAC 地址将在其他接口学习到。这样用户发往服务器的报文就会发往非法用户&#xff0c;不仅会导致用户与服务器不能正常通信&…

FreeRTOS之消息队列的示例记录

前言 我的理解是 消息队列主要是用于任务之间存在主从关系的时候&#xff0c;比如说显示屏显示数据&#xff0c;显示屏的作用只是提供显示&#xff0c;数据来源应该是其他任务线程&#xff0c;所以就存在多个线程通信问题。 FreeRTOS中消息队列 这里我们以数组为例&#xff…

Pytorch学习 day07(神经网络基本骨架的搭建、2D卷积操作、2D卷积层)

神经网络基本骨架的搭建 Module&#xff1a;给所有的神经网络提供一个基本的骨架&#xff0c;所有神经网络都需要继承Module&#xff0c;并定义_ _ init _ _方法、 forward() 方法在_ _ init _ _方法中定义&#xff0c;卷积层的具体变换&#xff0c;在forward() 方法中定义&am…