代码随想录算法训练营Day51|309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、股票问题总结

目录

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

前言

思路

算法实现

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

前言

思路

 算法实现

股票问题总结


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

题目链接

文章链接

前言

        本题在买卖股票II的基础上增加了一个冷冻期,因此就不能简单分为持有股票和卖出股票两个状态了。

思路

        利用动规五部曲进行分析:

1.确定dp数组及其下标的含义:

        dp[i][j]:第i天状态为j,所剩的最多现金为dp[i][j];

        本题的状态j可以分为如下四个状态:

  • 状态一:持有股票状态;
  • 因为冷冻期的存在,由不持有股票状态,引申出以下两种状态:

        状态二:保持卖出股票的状态(两天前就卖出了股票,并且已经度过了冷冻期,并保持未购入股票的状态);

        状态三:今天卖出股票;

  • 状态四:冷冻期;

2.确定递推公式:

        对于状态一的前一天可能有多种情况:

        情况一:前一天也为持有股票状态,dp[i][0] = dp[i - 1][0];

        情况二:前一天为处于保持卖出股票的状态,第i天购入股票,则dp[i][0] = dp[i - 1][1] - prices[i];

        情况三:前一天刚好为冷冻期,第i天购入股票,则dp[i][0] = dp[i - 1][3] - prices[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] = dp[i - 1][1];

        情况二:前一天为冷冻期,第i天恰好未保持卖出的状态,dp[i][1] = dp[i - 1][3] - prices[i];

        因此dp[i][1] = max(dp[i - 1][1], dp[i - 1][3] - prices[i]);

        对于状态三,第i天卖出股票,前一天必为持有股票的状态,即dp[i][2] = dp[i - 1][0] + prices[i];

        对于状态四,冷冻期的前一天必定刚好卖出股票,即dp[i][3] = dp[i - 1][2];

3.初始化dp数组:

        第0天持有股票,dp[0][0] 一定为-prices[0],卖出股票后,不管是当天还是冷冻期以及保持卖出股票的状态,所剩余的金钱一定都为0。

        因此dp[0][0] = -prices[0], dp[0][1] = 0, dp[0][2] = 0, dp[0][3] = 0;

4.确定遍历顺序:

        从递归公式上可以看出,dp[i] 依赖于 dp[i-1],所以是从前向后遍历。

5.打印dp数组:

        以 [1,2,3,0,2] 为例,dp数组如下:

算法实现

class Solution {
public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(), 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][3] - prices[i], dp[i - 1][1] - 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]));}
};

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

题目链接

文章链接

前言

        本题依然是买卖股票II的变形,在原题的基础上增加手续费即可。

思路

        dp[i][0] 表示第i天持有股票所省最多现金。 dp[i][1] 表示第i天不持有股票所得最多现金。

        如果第i天持有股票即dp[i][0], 那么可以由两个状态推出来:

  • 第i-1天就持有股票,那么就保持现状,所得现金就是昨天持有股票的所得现金 即:dp[i - 1][0];
  • 第i天买入股票,所得现金就是昨天不持有股票的所得现金减去 今天的股票价格 即:dp[i - 1][1] - prices[i];

       所以:dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);

        如果第i天不持有股票即dp[i][1]的情况, 依然可以由两个状态推出来:

  • 第i-1天就不持有股票,那么就保持现状,所得现金就是昨天不持有股票的所得现金 即:dp[i - 1][1];
  • 第i天卖出股票,所得现金就是按照今天股票价格卖出后所得现金,注意这里需要有手续费了即:dp[i - 1][0] + prices[i] - fee

        所以:dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);

 算法实现

class Solution {
public:int maxProfit(vector<int>& prices, int fee) {vector<vector<int>> dp(prices.size(), vector<int> (2, 0));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 max(dp[prices.size() - 1][0], dp[prices.size() - 1][1]);}
};

股票问题总结

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

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

相关文章

【JavaWeb】头条新闻纯JavaWeb项目实现 项目搭建 数据库工具类导入 跨域问题 Postman 第一期 (前端Vue3+Vite)

文章目录 一、项目简介1.1 微头条业务简介1.2 技术栈介绍 二、项目部署三、准备工具类3.1 异步响应规范格式类3.2 MD5加密工具类3.3 JDBCUtil连接池工具类3.4 JwtHelper工具类3.4 JSON转换的WEBUtil工具类 四、准备各层的接口和实现类4.1 准备实体类和VO对象4.2 DAO层接口和实现…

222. 完全二叉树的节点个数 - 力扣(LeetCode)

题目描述 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干…

[职场] 线束设计求职简历范文 #媒体#其他#笔记

线束设计求职简历范文 线束设计是指根据汽车电气系统的需求和规范&#xff0c;进行车载线束的布局、连接和组装的过程。下面是线束设计求职简历范文&#xff0c;供大家参考。 个人信息 姓名&#xff1a;蓝山 年龄&#xff1a;26岁 地址&#xff1a;东莞 工作经验&#xff…

C++面试宝典第27题:完全平方数之和

题目 给定正整数 n,找到若干个完全平方数(比如:1、4、9、16、...),使得它们的和等于n。你需要让组成和的完全平方数的个数最少。 示例1: 输入:n = 12 输出:3 解释:12 = 4 + 4 + 4。 示例2: 输入:n = 13 输出:2 解释:13 = 4 + 9。 解析 这道题主要考察应聘者对于…

MySQL- 运维-分库分表-Mycat

一、Mycat概述 1、安装 2、概念介绍 二、Mycat入门 启动服务 三、Mycat配置 1、schema.xml 2、rule.xml 3、server.xml 四、Mycat分片 1、垂直分库 2、水平分表 五、Mycat管理及监控 1、Mycat原理 2、Mycat管理工具 &#xff08;1&#xff09;、命令行 &#xff08;2&#…

【RPA】浅谈RPA技术及其应用

摘要&#xff1a;随着信息技术的飞速发展&#xff0c;企业对于自动化、智能化的需求日益增强。RPA&#xff08;Robotic Process Automation&#xff0c;机器人流程自动化&#xff09;技术应运而生&#xff0c;为企业提供了全新的自动化解决方案。本文首先介绍了RPA技术的基本概…

visiontransformerVIT

虽然 Transformer 架构已成为自然语言处理任务的事实标准&#xff0c;但其在计算机视觉中的应用仍然有限。在视觉上&#xff0c;注意力要么与卷积网络结合使用&#xff0c;要么用于替换卷积网络的某些组件&#xff0c;同时保持其整体结构不变。我们表明&#xff0c;这种对 CNN …

软件应用实例分享,电玩计时计费怎么算,佳易王PS5游戏计时器系统程序教程

软件应用实例分享&#xff0c;电玩计时计费怎么算&#xff0c;佳易王PS5游戏计时器系统程序教程 一、前言 以下软件教程以 佳易王电玩计时计费管理系统软件V17.9为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 点击开始计时后&#xff0c;图片…

使用easyExcel 定义表头 字体 格式 颜色等,定义表内容,合计

HeadStyle 表头样式注解 HeadFontStyle 表头字体样式 HeadStyle(fillPatternType FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor 22) HeadFontStyle(fontHeightInPoints 12) 以下为实现效果

Unity BuffSystem buff系统

Unity BuffSystem buff系统 一、介绍二、buff系统架构三、架构讲解四、框架使用buff数据Json数据以及工具ShowTypeBuffTypeMountTypeBuffOverlapBuffShutDownTypeBuffCalculateType时间和层数这里也不过多说明了如何给生物添加buff 五、总结 一、介绍 现在基本做游戏都会需要些…

【Nicn的刷题日常】之有序序列合并

1.题目描述 描述 输入两个升序排列的序列&#xff0c;将两个序列合并为一个有序序列并输出。 数据范围&#xff1a; 1≤&#xfffd;,&#xfffd;≤1000 1≤n,m≤1000 &#xff0c; 序列中的值满足 0≤&#xfffd;&#xfffd;&#xfffd;≤30000 0≤val≤30000 输入描述…

C++基础知识点预览

一.绪论&#xff1a; 1.1 C简史&#xff1a; 与C的关系&#xff1a; 被设计为C语言的继任者&#xff0c;C语言是一种过程型语言&#xff0c;程序员使用它定义执行特定操作的函数&#xff0c;而C是一种面向对象的语言&#xff0c;实现了继承、抽象、多态和封装等概念。C支持类&…

【RPA】智能自动化的未来:AI + RPA

伴随着人工智能&#xff08;AI&#xff09;技术的迅猛进步&#xff0c;机器人流程自动化&#xff08;RPA&#xff09;正在经历一场翻天覆地的变革。AI为RPA注入了新的活力&#xff0c;尤其在处理复杂任务和制定决策方面。通过融合自然语言处理&#xff08;NLP&#xff09;、机器…

从0开始学Docker ---Docker安装教程

Docker安装教程 本安装教程参考Docker官方文档&#xff0c;地址如下&#xff1a; https://docs.docker.com/engine/install/centos/ 1.卸载旧版 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \docker-client \docker-client-latest…

《学成在线》微服务实战项目实操笔记系列(P1~P83)【上】

史上最详细《学成在线》项目实操笔记系列【上】&#xff0c;跟视频的每一P对应&#xff0c;全系列12万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。 一、前期准备 1.1 项目介绍 P2 To C面向…

jvm垃圾收集器之七种武器

目录 1.回收算法 1.1 标记-清除算法(Mark-Sweep) 1.2 复制算法(Copying) 1.3 标记-整理算法(Mark-Compact) 2.HotSpot虚拟机的垃圾收集器 2.1 新生代的收集器 Serial 收集器&#xff08;复制算法&#xff09; ParNew 收集器 (复制算法) Parallel Scavenge 收集器 (复制…

熔断机制解析:如何用Hystrix保障微服务的稳定性

微服务与系统的弹性设计 大家好,我是小黑,在讲Hystrix之前,咱们得先聊聊微服务架构。想象一下,你把一个大型应用拆成一堆小应用,每个都负责一部分功能,这就是微服务。这样做的好处是显而易见的,更新快,容错性强,每个服务可以独立部署,挺美的对吧?但是,问题也随之而…

Win10系统备份的几种方案,以后不重装系统,备份系统恢复Backup,系统映像备份

Win10系统备份的几种方案 其实都不想重装系统&#xff0c;每次都不愿意去安装各种软件&#xff0c;麻烦&#xff0c;其实win10有几种备份的方案&#xff0c;可以参考一下。 如果下次出问题&#xff0c;我就将系统恢复到这个状态即可&#xff0c;真的不想重装系统&#xff0c;还…

Stable Diffusion 模型下载:Schematics(原理图)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十下载地址模型介绍 “Schematics”是一个非常个性化的LORA,我的目标是创建一个整体风格,但主要面向某些风格美学,因此它可以用于人物、物体、风景等。这次你会得到“连线”和“方案”…

Unity学习笔记(零基础到就业)|Chapter02:C#基础

Unity学习笔记&#xff08;零基础到就业&#xff09;&#xff5c;Chapter02:C#基础 前言一、复杂数据&#xff08;变量&#xff09;类型part01&#xff1a;枚举数组1.特点2.枚举&#xff08;1&#xff09;基本概念&#xff08;2&#xff09;申明枚举变量&#xff08;3&#xff…