动态规划——123. 买卖股票的最佳时机 III

目录

1、题目链接

2、题目分析

1.状态表示

 2.状态转移方程

 3.初始化

4.填表

5.返回值

3、代码解析


1、题目链接

123. 买卖股票的最佳时机 III

2、题目分析

1.状态表示

由题目可知,我们分为两种状态,买入和卖出,又因为只能完成两次交易,我们可以画图分析:

可以看出,从买入到买入,也可以从买入到卖出;

从卖出到卖出,也可以从卖出到买入,但是会增加交易次数;

所以我们用

f[i][j]表示第i天,交易j次后,处于买入状态的最大利润

g[i][j]表示第i天,交易j次后,处于卖出状态的最大利润

 2.状态转移方程

由图分析:

f[i][j] = max(f[i - 1][j], g[i - 1][j] - prices[i]);

g[i][j] = max(g[i-1][j], f[i - 1][j - 1] + prices[i]);

 关于第二个状态转移方程,如果j=0,那么就会有报错的风险,怎么解决呢?

加个if判断就好了

g[i][j] = g[i - 1][j];

                if (j >= 1) // 如果该状态存在

                    g[i][j] = max(g[i][j], f[i - 1][j - 1] + prices[i]);

只有当j>=1的时候,才执行 g[i][j] = max(g[i][j], f[i - 1][j - 1] + prices[i]),就可以解决这个问题了;

 3.初始化

在第0天,交易0次,处于买入的状态下,最大利润是f[0][0]=-p[0];

在第0天,交易0次,处于卖出的状态下,最大利润是g[0][0]=0;

注意,在第0天,是不可能出现交易一次或者交易两次的情况的,所以f[0][1]和f[0][2]是取不到的,所以我们将它设置为无穷小;这可以确保我们后面的计算是正确的;

还要注意,我们设置无穷小和无穷大时,和其他数计算会发生溢出的风险,所以为我们取int最大值的一半0x3f3f3f3f(十六进制),这样这个值既可以足够小,又不会有溢出的风险;

4.填表

按照从上到下,从左到右的顺序填表

5.返回值

我们需要返回的是在最后一天得到的最大的利润,但是不知道交易了几次,所以,我们要求出最后一天的利润的最大值

3、代码解析

int maxProfit(vector<int>& prices) {int n = prices.size();const int INT = 0x3f3f3f3f;vector<vector<int>> f(n, vector<int>(3, -INT));auto g = f;// 初始化f[0][0] = -prices[0], g[0][0] = 0;// 状态转移方程// f[i][j]表示第i天,交易j次后,处于买入状态的最大利润// g[i][j]表示第i天,交易j次后,处于卖出状态的最大利润for (int i = 1; i < n; i++) {for (int j = 0; j < 3; j++) {f[i][j] = max(f[i - 1][j], g[i - 1][j] - prices[i]);g[i][j] = g[i - 1][j];if (j >= 1) // 如果该状态存在g[i][j] = max(g[i][j], f[i - 1][j - 1] + prices[i]);}}int ret = 0;for (int i = 0; i < 3; i++) {ret = max(ret, g[n - 1][i]);}return ret;

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

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

相关文章

质点动力学

牛顿运动定律 动量守恒 动量定理 动量守恒定律 角动量守恒定律 动量与角动量的对比 例题 机械能守恒定律

cs与msf权限传递,以及mimikatz抓取win2012明文密码

mimikatz抓取win2012明文密码 一、启动cs服务端 二、启动cs客户端 三、创建监听器 四、生成脚本文件 五、选择存放路径 六、开启服务&#xff0c;让win2012能够通过网站下载 七、获得win2012控制权 八、抓取明文密码 mimikatz是可以抓明文的&#xff0c;mimikatz抓明文原理&a…

1966 ssm 流浪猫领养网站系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 流浪猫领养网站系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/…

动手学自然语言处理:解读大模型背后的核心技术

自从 ChatGPT 横空出世以来&#xff0c;自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09; 研究领域就出现了一种消极的声音&#xff0c;认为大模型技术导致 NLP “死了”。在某乎上就有一条热门问答&#xff0c;大家热烈地讨论了这个问题。 有…

【ajax实战03】拦截器

一&#xff1a;axios拦截器 拦截器分类&#xff1a; 请求拦截器以及响应拦截器 拦截器作用&#xff1a; 在请求或响应被then或catch处理前拦截它们 二&#xff1a;请求拦截器 作用&#xff1a; 发起请求之前&#xff0c;调用一个配置函数&#xff0c;对请求参数进行设置…

Python 爬虫从入门到入狱之路一

实际上爬虫一共就四个主要步骤&#xff1a; 明确目标 (要知道你准备在哪个范围或者网站去搜索)爬 (将所有的网站的内容全部爬下来)取 (去掉对我们没用处的数据)处理数据&#xff08;按照我们想要的方式存储和使用&#xff09; 我们在之前写的爬虫程序中&#xff0c;都只是获取…

【STM32-启动文件 startup_stm32f103xe.s】

STM32-启动文件 startup_stm32f103xe.s ■ STM32-启动文件■ STM32-启动文件主要做了以下工作&#xff1a;■ STM32-启动文件指令■ STM32-启动文件代码详解■ 栈空间的开辟■ 栈空间大小 Stack_Size■ .map 文件的详细介绍■ 打开map文件 ■ 堆空间■ PRESERVE8 和 THUMB 指令…

Java面试问题(一)

一.Java语言具有的哪些特点 1.Java是纯面向对象语言&#xff0c;能够直接反应现实生活中的对象 2.具有平台无关性&#xff0c;利用Java虚拟机运行字节码文件&#xff0c;无论是在window、Linux还是macOS等其他平台对Java程序进行编译&#xff0c;编译后的程序可在其他平台上运行…

微软Edge浏览器全解析

发展历程 微软Edge浏览器是一款现代化的浏览器&#xff0c;最初于2015年发布&#xff0c;作为Internet Explorer&#xff08;IE&#xff09;的继任者&#xff0c;并随着Windows 10操作系统一同亮相。然而&#xff0c;早期的Edge浏览器基于EdgeHTML引擎开发&#xff0c;与市场上…

《Windows API每日一练》5.4 键盘消息和字符集

本节我们将通过实例来说明不同国家的语言、字符集和字体之间的差异&#xff0c;以及Windows系统是如何处理的。 本节必须掌握的知识点&#xff1a; 第31练&#xff1a;显示键盘消息 非英语键盘问题 字符集和字体 第32练&#xff1a;显示默认字体信息 第33练&#xff1a;创建逻…

格式化输出软件

一个给图片修改名字的小软件 功能&#xff1a; 输入文件名字&#xff0c;生成一个”当前时间文件名“的格式化内容到剪贴板方便改名 主界面有个复选框&#xff0c;勾选后会生成”文件名当前时间“的内容 演示&#xff1a; 输入无效字符时 代码&#xff1a; import sys from…

Leetcode Hot100之矩阵

1. 矩阵置零 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 解题思路 题目要求进行原地更改&#xff0c;也就是不能使用额外的空间&#xff0c;因此我们可以使用第一行的元素来记录对应的…

java对word文档预设参数填值并生成

目录 &#xff08;1&#xff09;定义word文档模板 &#xff08;2&#xff09;模板二次处理 处理模板图片&#xff0c;不涉及图片可以跳过 处理模板内容 &#xff08;3&#xff09;java对word模板填值 &#xff08;4&#xff09;Notepad的XML Tools插件安装 工作上要搞一个…

基于STM32的智能家庭安防系统

目录 引言环境准备智能家庭安防系统基础代码实现&#xff1a;实现智能家庭安防系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;家庭安防管理与优化问题解决方案与优化收尾与总结 1. 引言 智能家庭安防系统通过使用ST…

flask与vue实现通过websocket通信

在一些情况下&#xff0c;我们需要实现前后端之间的时刻监听&#xff0c;本文是一篇工具文档&#xff0c;用于解决前后端之间使用websocket交互。 一. Flask的相关配置 1. 下载相关依赖库 如果还没有配置flask的话&#xff0c;需要先安装flask,同时为解决跨域问题&#xff0…

大模型自然语言生成自动驾驶可编辑仿真场景(其一 共十篇)

第一篇&#xff1a;LLM greater scene summarize 第二篇&#xff1a;LLM simulation Test effect 第三篇&#xff1a;LLM simulation driving scenario flow work 第四篇&#xff1a;LLM Algorithm flow description 第五篇&#xff1a;Configure the environment and back…

探索ChatGPT在程序员日常工作的多种应用

引言 在现代科技迅猛发展的今天&#xff0c;人工智能的应用已经深入到我们生活和工作的各个方面。作为程序员&#xff0c;我们时常面临大量繁杂的任务&#xff0c;从代码编写、错误调试到项目管理和团队协作&#xff0c;每一项都需要花费大量的时间和精力。近年来&#xff0c;…

[AI开发配环境]VSCode远程连接ssh服务器

文章目录 总览&#xff1a;ssh连接远程服务器连接免密登录&#xff1a;Docker&#xff1a;ssh连接远程宿主机后&#xff0c;进一步连接并使用其中的docker容器reload window 配置解释器&#xff1a;CtrlP&#xff0c;在上面输入“>python”, 然后选selecet interpreter运行命…

Sharding-JDBC分库分表

参考&#xff1a; https://mp.weixin.qq.com/s/A6WS1CSjF7wvBE_gKLyp8w https://shardingsphere.apache.org/document/legacy/4.x/document/cn/quick-start/sharding-jdbc-quick-start/ 注意&#xff1a; 支持的sql项&#xff1a; 全面支持DML、DDL、DCL、TCL和部分DAL。支…

Altera不同系列的型号命名规则

Altera芯片型号&#xff1a;10AX07H4F34I3SG 20nm工艺 资源&#xff1a; 大数据 云计算 人工智能 图像处理 MSEL