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

news2024/12/23 16:39:33

目录

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.coloradmin.cn/o/1865823.html

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

相关文章

如何从iPhone恢复错误删除的照片

嘿&#xff0c;iPhone 用户&#xff01;作为一名苹果专业人士&#xff0c;我见过相当多的“哎呀&#xff0c;我删除了它&#xff01;”的时刻。今天&#xff0c;我在这里指导您完成从iPhone中恢复那些珍贵的&#xff0c;错误删除的照片的迷宫。坐下来&#xff0c;拿起你的设备&…

【2020-2023】Transformer在小目标检测领域的应用与发展综述

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

std::enable_if和std::is_base_of

std::enable_if,其主要为了完成模板特偏化&#xff0c;有两个参数&#xff0c;第一个为布尔值类型&#xff0c;第二个如果布尔值为true&#xff0c;其为默认空值&#xff0c;如果已经赋值&#xff0c;则为对应的类型。 std::is_base_of&#xff0c;其一共存在两个参数&#xff…

windows10/win11截图快捷键 和 剪贴板历史记录 快捷键

后知后觉的我今天又学了两招&#xff1a; windows10/win11截图快捷键 按 Windows 徽标键‌ Shift S。 选择屏幕截图的区域时&#xff0c;桌面将变暗。 默认情况下&#xff0c;选择“矩形模式”。 可以通过在工具栏中选择以下选项之一来更改截图的形状&#xff1a;“矩形模式”…

【每日刷题】Day76

【每日刷题】Day76 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 561. 数组拆分 - 力扣&#xff08;LeetCode&#xff09; 2. 删除有序链表中重复的元素-II_牛客题霸…

多接口分线盒在工业自动化中的重要性与应用

简介 多接口分线盒是现代工业自动化中不可或缺的一个组成部分&#xff0c;它主要用于简化复杂的接线系统&#xff0c;提高效率和可靠性。本文将详细探讨多接口分线盒的定义、功能、以及在工业自动化中的应用情况。 无源多接口分线盒 多接口分线盒的定义与功能 多接口分线盒是…

vue draggable

一、安装&#xff1a; npm i -S vuedraggablenext 二、代码 <draggable :list"projectOptions" item-key"name" class"w-25" ghost-class"ghost"chosen-class"chosen" update"updateSort" animation"3…

Ubuntu系统安装软件---以安装QQ为例

以安装QQ为例&#xff0c;首先你的Ubuntu系统需要连上网&#xff0c;连上网的网络状态如下图所示。 在ubuntu系统的网页中搜索QQ&#xff0c;如下图所示。 进入QQ官网&#xff0c;点击Linux&#xff0c;如下图所示。 随后会让你选择什么架构的版本&#xff0c;如何查看自己的是…

金融企业数据跨境流动的核心需求是什么?如何才能落地?

在金融行业&#xff0c;涉及到的数据跨境流动的场景多种多样&#xff0c;主要涉及到金融机构的跨国经营、全球贸易以及服务贸易等多个方面&#xff1a; 企业跨国经营&#xff1a;当金融机构进行跨国经营时&#xff0c;如银行在海外设立分支机构或进行跨境投资&#xff0c;会涉及…

神经网络学习8-反向传播

back propagation 拿到前面传回来的L对z的偏导&#xff0c;再分别算损失值对x和w的偏导 反向传播 前馈过程求局部梯度 反向传播 这里的loss&#xff08;wxb-y)^2,第一个关于b的偏导为2(wxb-y),第二个关于w的为2w(wxb-y)

记录待办事项的便签软件哪个好用?

在快节奏的现代生活中&#xff0c;我们经常需要处理各种各样的待办事项&#xff0c;为了更好地管理时间&#xff0c;许多人选择使用便签软件来记录自己的待办事项。那么&#xff0c;记录待办事项的便签软件哪个好用&#xff1f;市面上众多的便签软件中&#xff0c;哪一个才是最…

【新闻】金融专业“免进”!私募巨头招聘涌现“新剧情”

A股市场在2024年逐渐出现新的运行特征&#xff0c;这不禁让部分主动投资的私募巨头公司重新登上招聘舞台。 但这一次&#xff0c;他们的招聘方向出现了新的变动。 有些机构有意识的为公司投研团队招聘“衔接”岗&#xff0c;有些则把重点放在了投研动作的交易层。 但这都不如…

社区团购小程序开发

在快节奏的现代生活中&#xff0c;人们越来越追求便利与效率。社区团购小程序应运而生&#xff0c;以其独特的优势成为连接社区居民与优质商品的重要桥梁。本文将探讨社区团购小程序的特点、优势以及未来发展趋势&#xff0c;为大家揭示这一新型购物模式的魅力。 社区团购小程序…

Superset二次开发之导入导出功能源码解读

可导出的类型 支持 看板(Dashboard)、图表(Charts)、数据集(Datasets)、SQL(saved_query)、数据库(Database connection) 单次或批量的导出,和单次导入操作 看板(Dashboard) 图表(Charts) 数据集(Datasets) SQL (saved_query) 数据库(database connections)…

为什么需要对数据质量问题进行根因分析?根因分析该怎么做?

在当今的商业环境中&#xff0c;数据已成为企业决策的核心。然而&#xff0c;数据的价值高度依赖于其质量。低质量的数据不仅会降低分析的准确性&#xff0c;还可能导致错误的决策&#xff0c;从而影响企业的竞争力和市场表现。因此&#xff0c;识别和解决数据质量问题是数据管…

定制汽车霍尔传感器应用及特点

霍尔传感器定制概览 霍尔传感器是一种广泛应用于汽车领域的磁性传感器&#xff0c;其工作原理基于霍尔效应&#xff0c;能够将磁场的变化转换为电信号输出。在汽车行业中&#xff0c;霍尔传感器因其高精度、稳定性和无接触式测量的特点而被广泛应用于发动机控制、自动变速控制…

推荐5款学习工作效率工具

Online AudioConvert Online AudioConvert 是一个在线音频格式转换工具&#xff0c;支持多种音频和视频文件格式的转换。用户可以将音频文件从一种格式转换为另一种格式&#xff0c;例如从 MP3 转换为 WAV 或从视频中提取音频。该工具无需注册、安装或文件大小限制&#xff0c;…

华为交换机的堆叠-Stack配置(基于业务口普通线缆的堆叠配置)

不想看原理请跳过一、二、三、四&#xff0c; 直接到配置五&#xff0c;干完活有时间在慢慢看原理。 一、什么是堆叠-Stack 指将多台交换机通过堆叠线缆连接在一起&#xff0c;逻辑上变成一台交换设备&#xff0c;作为一个整体参与数据转发。即&#xff1a;1 1 一 二、堆叠…

腾讯地图撒点并默认显示点位信息

实现步骤如下&#xff1a; 1、注册腾讯位置服务账号并获取 Key 2、需要创建一个地图容器&#xff0c;并使用腾讯地图的 API 初始化地图。通常涉及到设置地图的中心点、缩放级别和地图样式。 map new TMap.Map(document.getElementById(‘container’), { center: center, zo…

字符串匹配 --- BF算法 KMP算法

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey 本篇博客我们将介绍关于字符串匹配的BF算法以及KMP算法&#xff0c;请放心食用~ &#x1f3e0; 字符串匹配 假设有一个字符串为主串str&#x…