C++ day51 买卖股票最佳时期

news2025/1/19 23:19:22

题目1:309 买卖股票的最佳时机含冷冻期

题目链接:买卖股票的最佳时机含冷冻期

对题目的理解

prices[i]表示第i天股票的价格,尽可能多地完成更多的交易,不能同时进行多笔交易,卖出股票后,第二天无法买入股票(冷冻期是1天),计算最大利润

动态规划

动规五部曲

1)dp数组及下标i的含义

状态1:dp[i][0] 第i天持有股票的状态最大现金

状态2:dp[i][1] 第i天保持股票卖出的状态,冷冻期之后最大现金

状态3:dp[i][2] 第i天具体卖出股票的状态,冷冻期的前一天最大现金

状态4:dp[i][3] 第i天冷冻期的状态最大现金

最终求解:dp[prices.size()-1][1] dp[prices.size()-1][2]  dp[prices.size()-1][3]的

2)递推公式

dp[i][0] = dp[i-1][0] 前一天持有股票

买入股票:前一天是冷冻期;前一天保持卖出股票状态

dp[i][0] = dp[i-1][3]-prices[i]

dp[i][0] = dp[i-1][1]-prices[i]

dp[i][0] = max(dp[i-1][0],dp[i-1][3]-prices[i],dp[i-1][1]-prices[i])

dp[i][1] = dp[i-1][1] 冷冻期之后一直保持股票卖出的状态

dp[i][1] = dp[i-1][3] 冷冻期的状态的下一天

dp[i][1] = max(dp[i-1][1],dp[i-1][3])

dp[i][2] = dp[i-1][0]+prices[i]  前一天是持有股票的状态

dp[i][3] = dp[i-1][2]  前一天是具体卖出股票的状态

3)dp数组初始化

dp[0][0]=-prices[0]

dp[0][1]的状态是一个非法状态,看递推公式中需要初始化为多少,dp[1][0]=dp[0][1]-prices[1],所以将dp[0][1]初始化成0(当天买当天卖)

dp[1][0] = dp[0][3]-prices[1]  所以将dp[0][3]初始化为0

同理将dp[0][2]初始化为0

4)遍历顺序

根据递推公式,dp[i] 依赖于 dp[i-1],从小到大遍历

5)打印dp数组

代码

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        //定义dp数组
        vector<vector<int>> dp(prices.size(),vector<int>(4,0));
        //初始化dp数组
        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][1]-prices[i],dp[i-1][3]-prices[i]));//持有股票的状态
            dp[i][1] = max(dp[i-1][1],dp[i-1][3]);//保持没有股票的状态
            dp[i][2] = dp[i-1][0]+prices[i];//具体卖出股票的动作
            dp[i][3] = dp[i-1][2];//冷冻期
        }
        return max(dp[prices.size()-1][1],max(dp[prices.size()-1][2],dp[prices.size()-1][3]));
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

题目2:714 买卖股票的最佳时机含手续费

题目链接:买卖股票的最佳时机含手续费·

对题目的理解

prices[i]表示第i天的股票价格  fee代表交易股票的手续费,每笔交易都需要附手续费,可以无限次的进行交易,不能同时进行多次交易,返回利润的最大值。

动态规划

动规五部曲

1)dp数组及下标i的含义

dp[i][0]:第i天持有股票的最大现金数

dp[i][1]:第i天不持有股票的最大现金数

最后求解:dp[prices.size()-1][1]

2)递推公式

dp[i][0] = max(dp[i-1][0],dp[i-1][1]-prices[i]),因为可以无限次交易,所以持有股票可以分为两种情况,一种是一直持有,另一种是前一天不持有股票,那么今天可以买入

dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i]-fee),不持有股票可以分为两种情况,一种是一直不持有,还有一种是前一天持有股票,那么,今天卖出,就达到了不持有的情况,同时需要减去手续费

3)dp数组初始化

根据递推公式,初始化dp[0][0]和dp[0][1],

dp[0][0]代表第i天持有股票的最大现金数,dp[1][0]=dp[0][0],那么为-prices[0]

dp[1][0]代表第i天不持有股票的最大现金数  dp[1][1]=dp[0][1]  那么第一天一定是买或者不买股票,所以不持有股票的最大现金数是0

4)遍历顺序

根据递推公式,从小到大遍历 for(i=1;i<prices.size();i++)注意i从1开始遍历

5)打印dp数组

class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        //定义dp数组
        vector<vector<int>> dp(prices.size(),vector<int>(2,0));
        //初始化dp数组
        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][1],dp[i-1][0]+prices[i]-fee);
        }
        return dp[prices.size()-1][1];
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java后端自学错误总结

java后端自学错误总结 MessageSource国际化接口总结 MessageSource国际化接口 今天第一次使用MessageSource接口,比较意外遇到了一些坑 messageSource是spring中的转换消息接口&#xff0c;提供了国际化信息的能力。MessageSource用于解析 消息&#xff0c;并支持消息的参数化…

Spring Initial 脚手架国内镜像地址

官方的脚手架下载太慢了&#xff0c;并且现在没有了Java8的选项&#xff0c;所以找到国内的脚手架镜像地址&#xff0c;推荐给大家。 首先说官方的脚手架 官方的脚手架地址为&#xff1a; https://start.spring.io/ 但是可以看到&#xff0c;并没有了Java8的选项。 所以推荐…

如何通过K线发现短线机会?

一、K线的含义 股票一天之内有4个最关键的价格&#xff0c;开盘价、收盘价、最高价和最低价&#xff0c;把这个价格显示在图上就是K线图。 以金斗云智投电脑版为例&#xff0c;打开软件&#xff0c;任意搜索一支个股&#xff0c;就可以看到这支股票的K线。 股市新手看到这儿多…

【像素画板】游戏地图编辑器-uniapp项目开发流程详解

嘿&#xff0c;用过像素画板没有哦&#xff0c;相信喜欢绘画的小朋友会对它感兴趣呢&#xff0c;用来绘制像素画非常好看&#xff0c;有没有发现&#xff0c;它是可以用来绘制游戏地图的&#xff0c;是不是很好奇&#xff0c;来一起看看吧。 像素画板&#xff0c;也叫像素画的绘…

DeDeCMS v5.7 SP2 正式版 前台任意用户密码修改(漏洞复现)

1.环境搭建 PHP 5.6 DeDeCMSV5.7SP2 正式版 安装phpstudy&#xff0c;https://www.xp.cn/小皮面板 先启动Apache2.4.39和MySQL5.7.26 如果他会让你下载&#xff0c;点击是就好&#xff01; 让后点击网站—>点击创建网站 域名自己创建&#xff0c;自己取 其他的不变 点击…

iOS 自动签名打包,并用脚本上传appstore

背景&#xff1a; 1&#xff09;测试环境给测试&#xff0c;产品&#xff0c;或者其他业务人员打测试包时&#xff0c;经常存在需要添加设备&#xff0c;不得不重新生成描述文件&#xff0c;手动去更新打包机描述文件配置 2&#xff09;证书&#xff0c;描述文件过期造成打包失…

Session 与 JWT 的对决:谁是身份验证的王者? (上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

树与二叉树堆:经典OJ题集(2)

目录 二叉树的性质及其问题&#xff1a; 二叉树的性质 问题&#xff1a; 一、对称的二叉树&#xff1a; 题目&#xff1a; 解题思路&#xff1a; 二、另一棵树&#xff1a; 题目&#xff1a; 解题思路&#xff1a; 三、翻转二叉树&#xff1a; 题目&#xff1a;…

windows如何配置java环境变量(java环境变量配置教程)

本文章以Windows为例记录Java环境变量配置详情。 笔者系统为windows10&#xff0c; JDK百度云链接放在文末有需要的可以下载。 当我们下载并安装好JDK后需要配置环境变量&#xff0c;否则无法方便的使用JDK中的工具进行Java源文件的编译及运行&#xff0c;或者其他工具的使用…

numpy知识库:基于numpy绘制灰度直方图

前言 对于灰度图像而言&#xff0c;灰度直方图可以统计灰度图像内各个灰度级出现的次数。 灰度直方图的横坐标是灰度图像中各像素点的灰度级。灰度的数值范围为[0, 255]。因此&#xff0c;如果将图像分为256个灰度级&#xff0c;那么每个灰度级唯一对应一个灰度&#xff1b;如…

分享一个大学生免费的资源网站(含考研资源,竞赛四六级)

今天不小心从其他地方链接到的网站&#xff0c;里面包含考考研资料&#xff0c;四六级相关的资料&#xff0c;重点都是免费的&#xff0c;部分资料可能需要登录或者关注公众号才可见&#xff0c;&#xff0c;网站链接了CSDN 能跳转到CSND, 网站地址 :忠哥资源共享http://jian…

奇技淫巧第9期

今天回顾一下 5~12 月所遇到的零碎知识点。 文章目录 歪门邪道优雅删除“学习资料”快速下载 vscode两种硬盘格式zotero在word中插入参考文献markdown 下划线查看 CPU Linux 命令postgres 无法通过 root 用户操作bash 初学者礼包gitwin 11 edge 浏览器0x80190001 报错 python …

inux基础项目开发1:量产工具——业务系统(七)

前言&#xff1a; 前面我们已经构造出来显示系统、输入系统、文字系统、UI系统、页面系统&#xff0c;这个项目百分之八十需要实现的都已经构建出来了&#xff0c;最后让我们对这个项目进行最后一项系统的搭建&#xff0c;也就是业务系统&#xff0c;说到业务大家应该就知道我们…

软件生命周期四个阶段SDLC

软件产品生命周期&#xff1a;指软件产品研发全部过程、活动和任务的结构框架。 产品的生命周期一般包括四个阶段&#xff1a;引入期、成长期、成熟期和衰退期&#xff0c;在不同的阶段中&#xff0c;市场对产品的反应不同&#xff0c;其销售特点不同&#xff0c;因而产品管理的…

Windows驱动中使用数字签名验证控制设备访问权限

1. 背景 在一般的驱动开发时&#xff0c;创建了符号链接后在应用层就可以访问打开我们的设备并进行通讯。 但我们有时候不希望非自己的进程访问我们的设备并进行交互&#xff0c;虽然可以使用 IoCreateDeviceSecure 来创建有安全描述符的设备&#xff0c;但大数的用户账户为了方…

【理解ARM架构】中断处理 | CPU模式

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《理解ARM架构》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f35c;中断&#x1f368;GPIO中断代码实现 &#x1f35c;CPU&#x1f368;CONTROL…

设计模式-结构型模式之装饰者设计模式

文章目录 六、装饰者模式 六、装饰者模式 装饰者模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。它是作为现有的类的一个包装。 装饰类和被装饰类可以独立发展&#xff0c;不会相互耦合&#xff0c;装饰者模…

各大期刊网址

AAAL: http://dblp.uni-trier.de/db/conf/aaai/ CVPR: http://dblp.uni-trier.de/db/conf/cvpr/ NeurlPS:http://dblp.uni-trier.de/db/conf/nips/ ICCV: http://dblp.uni-trier.de/db/conf/iccv/ IJCAL: http://dblp.uni-trier.de/db/conf/ijcal/ 并非原创引…

Linux(12):磁盘配额(Quota)与进阶文件系统管理

磁盘配额&#xff08;Quota&#xff09;的应用与实作 Quota 的一般用途&#xff1a; 针对 www server &#xff0c;例如:每个人的网页空间的容量限制&#xff1b; 针对 mail server&#xff0c;例如:每个人的邮件空间限制。 针对 file server&#xff0c;例如:每个人最大的可用…

【开源】基于Vue+SpringBoot的康复中心管理系统

项目编号&#xff1a; S 056 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S056&#xff0c;文末获取源码。} 项目编号&#xff1a;S056&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员…