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

动态规划解题步骤:

1.确定状态表示:dp[i]是什么

2.确定状态转移方程:dp[i]等于什么

3.初始化:确保状态转移方程不越界

4.确定填表顺序:根据状态转移方程即可确定填表顺序

5.确定返回值

题目链接:123. 买卖股票的最佳时机 III - 力扣(LeetCode)

题解:

1.状态表示:

f[k][i]表示截止第i天,第i天为可买入状态的最大利润,且当前已交易k次

g[k][i]表示截止第i天,第i天为可卖出状态的最大利润,且当前已交易k次

2.状态转移方程:

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

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

3.初始化:初始化第一列为负无穷(-0x3f3f3f3f),另外 f[0][0]=0   g[0][0]=-prices[0];

注意:对于f表,其本应该初始化第一行和第一列,但是为了优化代码和g表保持一致,可以只初始化第一列,对于第一行的数据只需对其状态转移方程添加位置判断即可,对于不合法的位置其状态转移方程为f[k][i-1],合法位置的状态转移方程为max(f[k][i-1],g[k-1][i-1]+prices[i])

4.填表顺序:从上往下,从左往右,两个表一起填

5.返回值:返回第n-1天为可买入状态的最大利润(交易次数可能为0、1、2)

class Solution {
public:const int INF=0x3f3f3f3f;int maxProfit(vector<int>& prices) {//f[k][i]表示截止第i天,第i天为可买入状态的最大利润,且当前已交易k次//g[k][i]表示截止第i天,第i天为可卖出状态的最大利润,且当前已交易k次//第i天为可买入状态,则前一天有两种情况:前一天为可买入状态,交易次数相同,今天什么也没做;//                                   前一天为可卖出状态,交易次数少1,今天卖出了股票//f[k][i]=max(f[k][i-1],g[k-1][i-1]+prices[i])//第i天为可卖出状态,则前一天有两种情况:前一天为可卖出状态,交易次数相同,今天什么也没做//                                   前一天为可买入状态,交易次数相同,今天买了股票//g[k][i]=max(g[k][i-1],f[k][i-1]-prices[i])size_t n=prices.size();//处理边界条件if(n==1) return 0;//创建dp表vector<vector<int>> f(3,vector<int>(n,-INF));vector<vector<int>> g(3,vector<int>(n,-INF));//初始化(创建dp表时已初始化一部分,相当于初始化了第一列)f[0][0]=0;g[0][0]=-prices[0];//填表for(int k=0;k<=2;++k){for(int i=1;i<n;++i){if(k-1>=0) f[k][i]=max(f[k][i-1],g[k-1][i-1]+prices[i]);else f[k][i]=f[k][i-1];g[k][i]=max(g[k][i-1],f[k][i-1]-prices[i]);}}//返回值return max(f[0][n-1],max(f[1][n-1],f[2][n-1]));}
};

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

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

相关文章

递归神经网络(RNN)简介

递归神经网络简介 在本文中,我们将介绍神经网络的一种新的变体,即递归神经网络,也称为 (RNN),当数据是连续的时,如时间序列数据和文本数据,它比简单的神经网络效果更好。 什么是递归神经网络 (RNN)? 循环神经网络 (RNN) 是一种神经网络,其中上一步的输出作为当前…

Quarto ppt模板制作与Rstudio git连接

本篇记录下当前ppt演示中比较流行的quarto document使用情况以及Rstudio与git相连接的一些实操。 1 Quarto ppt模板制作 1.1 Quarto简介&#xff08;来自Kimi&#xff09; Quarto 是一个由 RStudio 的母公司 Posit 团队开发的开源科学和技术出版系统&#xff0c;它建立在 Pan…

计算机网络——传输层服务

传输层会给段加上目标ip和目标端口号 应用层去识别报文的开始和结束

.NET 6新特性 | System.Text.Json功能改进

在.NET 6.0中&#xff0c;JSON处理库得到了显著的改进&#xff0c;主要体现在System.Text.Json上。以下是对.NET 6.0中改进的JSON处理库的详细分析&#xff1a; 一、System.Text.Json的引入与优势 在.NET 6中&#xff0c;Microsoft引入了新的JSON库System.Text.Json作为官方推…

安全基线加固

安全基线加固 定义&#xff1a;为了实现基本防护需求而制定的一系列基准&#xff1b; Windows && Linux 安全基线加固 操作系统具体操作 Windows 账户认证 基本要求对应操作对登录操作系统的用户进行身份标识和鉴别 操作内容&#xff1a;检测开机登录时是否需要密码…

二叉树算法之字典树(Trie)详细解读

字典树&#xff08;Trie&#xff0c;也称前缀树或单词查找树&#xff09;是一种用于快速查找字符串的数据结构&#xff0c;主要应用于字符串集合的高效存储和查找。字典树特别适合处理具有相同前缀的大量字符串集合&#xff0c;比如单词自动补全、拼写检查等场景。 1. 字典树的…

upload-labs靶场Pass-01

upload-labs靶场Pass-01 分析 查看提示&#xff0c;提示如下 查看源码 function checkFile() {var file document.getElementsByName(upload_file)[0].value;if (file null || file "") {alert("请选择要上传的文件!");return false;}//定义允许上传…

Java-类与对象-下篇

关于类与对象&#xff0c;内容较多&#xff0c;我们分为两篇进行讲解&#xff1a; &#x1f4da; Java-类与对象-上篇&#xff1a;————<传送门:Java-类与对象-上篇-CSDN博客> &#x1f4d5; 面向对象的概念 &#x1f4d5; 类的定义格式 &#x1f4d5; 类的使用 …

ubuntu 安装nginx

sudo apt-get update sudo apt-get install nginx sudo nginx -vsudo systemctl status nginx sudo systemctl start nginx sudo systemctl stop nginx sudo systemctl restart nginx#浏览器输入&#xff1a;http://192.168.31.181/#查看文件结构 cd /etc/nginx sudo cp nginx.…

华为OD机试2024年真题(基站维修工程师)

基站维修工程师&#xff08;200分&#xff09; 小王是一名基站维护工程师&#xff0c;负责某区域的基站维护。 某地方有n个基站(1<n<10)&#xff0c;已知各基站之间的距离s(0<s<500)&#xff0c;并且基站x到基站y的距离&#xff0c;与基站y到基站x的距离并不一定会…

Java 类和对象详解(下)

个人主页&#xff1a;鲤鱼王打挺-CSDN博客 目录 &#x1f497;前言&#xff1a; &#x1f4af;一.static关键字 1. 为什么要使用static 2. static 修饰成员变量&#xff1a; 3. static 修饰成员方法&#xff1a; ​编辑 4. 静态代码块 5.静态导入包 &#x1f4af;二.…

采用分布式锁机制解决Gateway配合Redis实现统一鉴权及分布式会话共享数据不一致问题

在现代分布式系统中&#xff0c;为了实现高可用性和性能优化&#xff0c;通常会采用Gateway与Redis相结合的架构来统一鉴权&#xff0c;并实现分布式会话共享功能。然而&#xff0c;在这种架构中&#xff0c;数据不一致问题是常见的挑战之一。本文将详细探讨如何通过分布式锁机…

Wi-Fi安全性入门(基于ESP-IDF-v4.4)

主要参考资料&#xff1a; Wi-Fi 安全性: https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.4/esp32/api-guides/wifi-security.html 目录 1.ESP32 Wi-Fi 安全功能1.1 受保护的管理帧 (PMF)1.2 第三代 Wi-Fi 访问保护 (WPA3-Personal) 1.ESP32 Wi-Fi 安全功能 支…

java 第12天 单例 接口

一.设计模式之单例模式 *饿汉式/醉汉式 步骤&#xff1a; 创建私有化构造方法私有的 静态的 属于本类类型的对象公共的 静态的返回本类对象的方法 // 醉汉式/饿汉式 class Moon{// 1 私有化构造方法private Moon(){}// 2 创建一个私有的静态的属于本类类型的对象private stati…

YOLOv11改进策略【卷积层】| 替换骨干网络 CVPR-2023 FasterNet 高效快速的部分卷积块

一、本文介绍 本文记录的是基于FasterNet的YOLOv11轻量化改进方法研究。FasterNet的网络结构借鉴 CNN 的设计理念,通过提出的PConv减少推理时的计算和内存成本,同时减少通道数并增加部分比例,降低延迟,并通过后续的PWConv来弥补特征信息可能缺失的问题,提高了准确性。本文…

如何在 MySQL 中处理大量的 DELETE 操作??

全文目录&#xff1a; 开篇语前言摘要简介概述DELETE 操作的基本概念常用的 DELETE 方法 核心源码解读简单 DELETE 语句批量 DELETE 示例 案例分析案例1&#xff1a;使用简单 DELETE 删除用户数据案例2&#xff1a;使用分批 DELETE 应用场景演示场景1&#xff1a;用户管理系统场…

linux系统之jar启动脚本

编辑linux启动脚本 执行 vi run_blog 按i 进入编辑&#xff0c;复制以下代码&#xff0c;并根据当前环境修改三个参数。以下是详细完整脚本代码&#xff1a; #!/bin/bash# 配置部分 JAR_PATH"/path/to/your/app.jar" # 替换为你的 JAR 文件的实际路径 L…

Gin框架操作指南07:路由与中间件

官方文档地址&#xff08;中文&#xff09;&#xff1a;https://gin-gonic.com/zh-cn/docs/ 注&#xff1a;本教程采用工作区机制&#xff0c;所以一个项目下载了Gin框架&#xff0c;其余项目就无需重复下载&#xff0c;想了解的读者可阅读第一节&#xff1a;Gin操作指南&#…

【JVM】内存模型

文章目录 内存模型的基本概念案例 程序计数器栈Java虚拟机栈局部变量表栈帧中局部变量表的实际状态栈帧中存放的数据有哪些 操作数栈帧数据 本地方法栈 堆堆空间是如何进行管理的? 方法区静态变量存储 直接内存直接内存的作用 内存模型的基本概念 在前面的学习中,我们知道了字…

Java 8 Stream API:从基础到高级,掌握流处理的艺术

一、Stream&#xff08;流&#xff09;基本介绍 Java 8 API 添加了一个新的抽象称为Stream&#xff08;流&#xff09;&#xff0c;可以让你以一种声明的方式处理数据&#xff0c;这种风格将要处理的元素集合看做一种流&#xff0c;元素流在管道中传输&#xff0c;并在管道中间…