算法学习day51
算法学习day51
- 1.力扣309.最佳买卖股票时机含冷冻期
- 1.1 题目描述
- 1.2分析
- 1.3 代码
- 2.力扣714.买卖股票的最佳时机含手续费
- 2.1 题目描述
- 2.2 分析
- 2.3 代码
- 3.参考资料
1.力扣309.最佳买卖股票时机含冷冻期
1.1 题目描述
题目描述
给定一个整数数组,其中第i个元素代表了第i天的股票价格。
设计一个算法求最大利润。在满足以下约束条件下,尽可能多的完成交易:
(1)你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)
(2)卖出股票后,你无法在第二天买入股票(冷冻期为1天)
例:
输入:[1,2,3,0,2]
输出:3
解释:对应的交易状态为:[买入,卖出,冷冻期,买入,卖出]
1.2分析
动规五部曲
1.确定dp数组以及下标的含义
dp[i] [j]:第i天状态为j,所剩的最多现金为dp[i] [j]
dp[i] [0]: 持有股票(今天买入股票,或者之前买入后没有操作了,一直持有)
dp[i] [1]:保持卖出股票的状态(度过了冷冻起之后,一直没有操作)
dp[i] [2]:今天卖出股票
dp[i] [3]: 今天为冷冻期,但冷冻期状态不可持续
2.确定递推公式
dp[i] [0]: 持有股票(今天买入股票,或者之前买入后没有操作了,一直持有)
(1)前一天持有股票的状态,dp[i] [0] = dp[i - 1] [0]
(2)今天买入:
(2.1)前一天是冷冻期,然后今天买入,dp[i - 1] [3] - prices[i]
(2.2)前一天保持卖出股票状态,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]:**保持卖出股票的状态(度过了冷冻起之后,一直没有操作)
(1) 前一天就卖出股票了
(2) 前一天是冷冻期
递推公式: dp[i] [1] = max(dp[i - 1] [1], dp[i - 1] [3])
**dp[i] [2]:**今天卖出股票
今天卖出,说明昨天一定持有
递推公式:dp[i] [2] = dp[i - 1] [0] + prices[i]
dp[i] [3]: 今天为冷冻期,但冷冻期状态不可持续
到达冷淡期,说明昨天卖出了股票
递推公式:dp[i] [3] = dp[i - 1] [2]
dp[i][0] = max(dp[i - 1][0], max(dp[i - 1][3], 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];
3.dp数组如何初始化
dp[0] [0] = -prices[0]
dp[0] [1] = 0
dp[0] [2] = 0
dp[0] [3] = 0
4.确定遍历顺序
显然从前往后遍历
5.举例推导dp数组

1.3 代码
class Solution {
public:int maxProfit(vector<int>& prices) {int n = prices.size();if (n == 0) return 0;vector<vector<int>> dp(n, vector<int>(4, 0)); // 创建一个 n 行 4 列的二维数组 dp,用于记录各个状态下的最大收益dp[0][0] -= prices[0]; // 初始状态为持有股票状态,因此要减去第一天股票价格for (int i = 1; i < n; 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[n - 1][3], max(dp[n - 1][1], dp[n - 1][2])); }
};
2.力扣714.买卖股票的最佳时机含手续费
2.1 题目描述
题目描述:
给定一个整数数组prices , 其中第i个元素代表了第i天的股票价格;非负整数fee代表了交易的手续费。
可以无限次交易,但是每一笔交易都需要手续费。如果你已经购买了一个股票,在卖出它之前不能在继续购买股票了。
返回获得利润的最大值。
例:
输入:prices = [1, 3, 2, 8, 4, 9] , fee= 2
输出: 8
- 在此处买入 prices[0] = 1
- 在此处卖出 prices[3] = 8
- 在此处买入 prices[4] = 4
- 在此处卖出 prices[5] = 9
- 总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8.
2.2 分析
dp[i] [0] 表示第i天持有股票所省最多现金。dp[i] [1] 表示第i天不持有股票所得最多现金
1.dp[i] [0] 表示第i天持有股票所省最多现金由以下状态推导出来:
(1) 第i -1 就持有股票,保持现状,所得现金就是昨天持有股票所得现金,dp[i- 1] [0]
(2) 第i天买入股票,所得现金就是昨天不持有股票的所得现金减去今天的股票价格,dp[i - 1] [1] - prices[i]
递推公式:dp[i] [0] = max(dp[i-1] [0], dp[i - 1] [1] - prices[i])
2.dp[i] [1] 表示第i天不持有股票所得最多现金
(1)如果第i -1 就不持有股票,保持现状,所得现金就是昨天不持有股票的现金,dp[i-1] [1]
(2) 第i天卖出股票,所得现金就是按照今天股票价格卖出后所得现金,需要手续费,dp[i - 1] [0] + prices[i] - fee
递推公式:dp[ i ] [1] = max(dp[i - 1] [1] , dp[ i- 1] [0] + prices[i] - fee)
2.3 代码
class Solution {
public:int maxProfit(vector<int>& prices, int fee) {int n = prices.size();// 定义 dp 数组,dp[i][0/1] 表示第 i 天结束时,// 持有股票/不持有股票的最大收益vector<vector<int>> dp(n, vector<int>(2, 0));dp[0][0] -= prices[0]; // 第一天持股,花费 prices[0] 的成本for (int i = 1; i < n; i++) {// 第 i 天结束时持有股票的最大收益分两种情况:// 1. 前一天也持有股票,今天不进行任何操作,所以今天的最大收益就是昨天的最大收益// 2. 前一天不持有股票,今天买入股票,所以今天的最大收益就是前一天不持有股票时的最大收益减去今天的股票价格dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);// 第 i 天结束时不持有股票的最大收益也分两种情况:// 1. 前一天也不持有股票,今天不进行任何操作,所以今天的最大收益就是昨天的最大收益// 2. 前一天持有股票,今天卖出股票,所以今天的最大收益就是前一天持有股票时的最大收益加上今天的股票价格减去手续费dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);}// 返回最后一天结束时,持有股票和不持有股票两种状态中的最大收益return max(dp[n - 1][0], dp[n - 1][1]);}
};
3.参考资料
[代码随想录]
相关文章:
算法学习day51
算法学习day511.力扣309.最佳买卖股票时机含冷冻期1.1 题目描述1.2分析1.3 代码2.力扣714.买卖股票的最佳时机含手续费2.1 题目描述2.2 分析2.3 代码3.参考资料1.力扣309.最佳买卖股票时机含冷冻期 1.1 题目描述 题目描述 给定一个整数数组,其中第i个元素代表了第…...
10 JS01——初识JS
目标: 1、初识JavaScript 2、JavaScript注释 3、JavaScript输入输出语句 一、初识JavaScript 1、JavaScript是什么 JavaScript是世界上最流行的语言之一,是一种运行在客户端的脚本语言(Script是脚本的意思) 脚本语言:不需要编译,运行过程…...
【软考备考-综合知识】安全性、可靠性与系统性能评测基础知识
计算机的安全性 安全等级 计算机系统中的三类安全性是指技术安全性、管理安全性和政策法律安全性。 信息安全五要素 机密性:全包信息不暴露给未授权的实体或进程。 完整性:只有得到允许的人才能够修改数据,并能够判别出数据是否已被篡改。…...
匆忙之间难免疏忽,写代码更加如此
一个方法包含了多个知识点的合计,合计起来用。实战开发特点1; 基础知识点不牢固,您必定就会感觉寸步难行啊 public class AddJiChuShu{int a 1;int b 2;int c 0;int d 0;string str "";string str2 "张三";//mothe…...
低代码(七)低代码平台后端技术选型2.0
JWT 登录token Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服…...
UDS介绍
首先要有网络网络七层的概念: 学习链接: 七层网络模型-CSDN博客 UDS网络层/TP层(ISO 15765-2)的解读 - 知乎 (zhihu.com) 概念: UDS(Unified Diagnostic Services,统一的诊断服务。 标准名是《…...
ASP.NET Core MVC 从入门到精通之初窥门径
随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,…...
英码科技智慧环卫:构建宜居城市新篇章
随着城市化进程的加快,城市环境卫生问题日益凸显。如何提高城市环境卫生管理水平,提升城市品质,成为了各级政府和社会各界关注的焦点。智慧环卫作为一种结合现代信息技术的环境卫生管理方式,正在逐渐成为解决城市环境卫生问题的有…...
在Spring Boot微服务使用HashOperations操作Redis Hash哈希散列
记录:403 场景:在Spring Boot微服务使用RedisTemplate的HashOperations操作Redis Hash哈希散列。 版本:JDK 1.8,Spring Boot 2.6.3,redis-6.2.5 1.微服务中Redis配置信息 1.1在application.yml中Redis配置信息 spring:redis:host: 192.1…...
innobackupex备份mysql产生returned OS error 124
解决使用innobackupex备份mysql产生returned OS error 124 xtrabackup 报错Too many open files 故障处理 一、背景 客户反馈数据库备份失败。 二、环境描述 [rootmes-node1 ~]# mysql -V mysql Ver 14.14 Distrib 5.7.24, for Linux (x86_64) using EditLine wrapper [root…...
明明有index.jsp文件访问的时候却显示404
重建一下项目...
人工智能前沿——「全域全知全能」人类新宇宙ChatGPT
🚀🚀🚀OpenAI聊天机器人ChatGPT——「全域全知全能」人类全宇宙大爆炸!!🔥🔥🔥 一、什么是ChatGPT?🍀🍀 ChatGPT是生成型预训练变换模型(Chat G…...
eslint-plugin-import - import/order
eslint-plugin-import是什么? 该插件目的在于支持ES6以上的导入/导出语法,并防止文件路径和导入名称拼写错误的问题。 import/order是什么? 按照约定的规则对引入的模块进行排序。 import/order常用规则介绍 groups 约定引入模块顺序的…...
selenium知识点大全
selenium知识点大全 在使用selenium之前必须先配置浏览器对应版本的webdriver。 1. 初始化浏览器对象 from selenium.webdriver import Chrome# 创建浏览器对象,并且打开一个空的页面 browser Chrome()# 关闭浏览器 browser.close()2. 访问指定网页 from selen…...
Biotin-PEG-SH生物素-聚乙二醇-巯基结构式;SH-PEG-Biotin
Biotin-PEG-SH 生物素-聚乙二醇-巯基 中文名称:生物素-聚乙二醇-巯基 英文名称:Biotin-PEG-SH Biotin-PEG-Thiol 性状:粘稠液体或者固体粉末,取决于分子量 溶剂:溶于水和DCM、DMF等大部分有机溶剂 分子式&#x…...
【防止恶意用户注册】-- 手机在网状态 API 的防欺诈应用解析
简介 手机在网状态 API 支持传入手机号码,查询手机号在网状态,返回在网、在网不可用、不在网(销号/未启用/停机)等多种状态,查询手机号在网状态之后,可以根据具体的业务需求来进行不同的处理。 本文主要介…...
Python json 数据提取 jsonpath 详解
一、JsonPath JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。也就是独立的可以配合多种语言进行匹配的目标值的一种类库,和…...
TCP和UDP的区别以及应用场景
区别 首先UDP协议非常简单,头部只有8个字节: 校验和为了提供可靠的UDP首部和数据而设计,防止收到在网络传输中受损的UDP包。 再对比下TCP协议: 传输层有两个传输协议分别是 TCP 和 UDP,在内核中是两个完全独立的软件…...
高铁轮毂表面缺陷的<视觉显著性>超像素图像检测方法
内容:提出一种基于视觉显著性注意机制的超像素自适应检测方法; 设计视觉显著性注意机制滤波器用于粗略定位出缺陷空间范围,结合超像素分块图像分割方法消除光照不均匀引起的噪声干扰,有效地完成缺陷区域的边界分割和实时特征提取&…...
纺织工业库房如何有效防潮?恒温恒湿真的有效吗?
纺织工业库房中的设备或存放的货物对温度或湿度的变化又非常敏感,温度或湿度的波动可能会产生一些问题。 针对库房环境温湿度的监测,若采用人工检测的方式,很难管控精准且工作效率低;其次,人工综合成本高。那么该如何实…...
第07章 FastMCP 把检索封装成 Agent 工具
第07章 FastMCP 把检索封装成 Agent 工具 工单知识库已经能在 Python 进程内被普通函数调用,但要让外部 Agent、Web 后端或其他语言的客户端使用这份能力,函数级别的接口不够:缺少协议、缺少描述、缺少跨进程通讯。MCP(Model Cont…...
多模态AI应用开发实战:GPT与图像生成的集成架构与优化
1. 项目概述与核心价值最近在折腾AI图像生成和智能对话的整合应用时,发现了一个挺有意思的仓库:bubblesslayyer-cmd/Awesome-GPT-Image-2-OpenAi。这个项目名字乍一看有点长,但拆解一下就能明白它的核心——“Awesome”系列通常代表精选资源集…...
Nix构建确定性AI编程环境:解决Cursor编辑器依赖冲突难题
1. 项目概述:当代码编辑器遇上Nix的确定性魔法 最近在折腾开发环境时,我遇到了一个老生常谈但又无比头疼的问题:团队里新来的同事怎么也跑不起来我本地运行得好好的一个代码辅助工具链。依赖版本冲突、系统库路径不对、甚至是因为他用的macO…...
告别Demo!用EMQX和Java模拟真实物联网设备上报数据流(Windows本地开发环境)
告别Demo!用EMQX和Java构建真实物联网数据流模拟方案 在物联网开发中,最令人头疼的莫过于缺乏真实设备进行测试。想象一下,当你精心设计的平台等待设备接入时,硬件团队却告诉你"下周才能交付原型机"。这种等待不仅拖延进…...
Aurora框架解析:一体化高性能云原生开发平台的设计与实践
1. 项目概述与核心价值如果你在开源社区里混迹过一段时间,尤其是对现代化、高性能的Web开发框架感兴趣,那么“Aurora”这个名字你大概率不会陌生。它不是一个简单的库或者工具,而是一个由社区驱动的、旨在构建下一代企业级应用开发平台的雄心…...
SyntaxUI:基于原子设计与Web组件的现代UI库开发实践
1. 项目概述:一个为开发者而生的现代UI组件库 如果你是一名前端开发者,或者正在构建一个需要用户界面的应用,那么你肯定经历过这样的场景:为了一个按钮的样式、一个表格的交互,或者一个模态框的动画,反复在…...
车载以太网之要火系列 - 第46篇:郭大侠学SOME/IP (offer Service):启动时快稍后慢,断断续续哥还在
写在开篇蓉儿继续挖坑上回说到,郭靖搞清楚了Offer Service的基本原理——服务端广播“我会啥,我在这”,TTL告诉客户端有效期。郭靖合上笔记本,突然皱起眉头:“蓉儿,我有个问题——如果每个ECU都每隔1.5秒发…...
CircuitPython硬件交互实战:引脚命名、模块管理与内存优化
1. 项目概述:CircuitPython硬件交互的基石 如果你刚开始接触CircuitPython,或者从Arduino转过来,可能会对如何控制板子上的某个引脚感到困惑。板子上明明印着“A0”、“D13”,但在代码里到底该怎么写? board.A0 和 …...
基于CLUE与加速度计的鸡蛋坠落实验:从传感器数据到缓冲设计优化
1. 项目概述:用传感器数据为物理实验“上保险” 鸡蛋坠落实验,一个听起来就充满童年乐趣和“悲剧”风险的经典物理项目。它的核心挑战在于,如何设计一个缓冲装置,让一枚脆弱的生鸡蛋从高处坠落而不破裂。传统上,我们依…...
AXI Crossbar设计解析:从总线互联原理到SoC集成实战
1. 项目概述:AXI Crossbar,不仅仅是“总线交叉开关”在复杂的数字系统设计,尤其是SoC(片上系统)和FPGA应用中,我们常常面临一个核心问题:多个主设备(Master,如CPU、DMA控…...
