当前位置: 首页 > article >正文

LeetCode 123. Best Time to Buy and Sell Stock III 题解

LeetCode 123. Best Time to Buy and Sell Stock III 题解题目描述给定一个数组它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意你不能同时参与多笔交易你必须在再次购买前出售掉之前的股票。示例 1输入prices [3,3,5,0,0,3,1,4] 输出6 解释在第 4 天股票价格 0的时候买入在第 6 天股票价格 3的时候卖出这笔交易所能获得利润 3-0 3 。 随后在第 7 天股票价格 1的时候买入在第 8 天 股票价格 4的时候卖出这笔交易所能获得利润 4-1 3 。示例 2输入prices [1,2,3,4,5] 输出4 解释在第 1 天股票价格 1的时候买入在第 5 天 股票价格 5的时候卖出这笔交易所能获得利润 5-1 4 。 注意你不能在第 1 天和第 2 天接连购买股票之后再将它们卖出。因为这样属于同时参与了多笔交易你必须在再次购买前出售掉之前的股票。示例 3输入prices [7,6,4,3,1] 输出0 解释在这种情况下, 没有交易完成, 所以最大利润为 0。解题思路方法动态规划思路动态规划的核心思想是将原问题分解为子问题并存储子问题的解以避免重复计算。对于买卖股票的最佳时机 III 问题我们可以定义以下状态dp[i][0]第 i 天不持有股票且没有进行过任何交易的最大利润。dp[i][1]第 i 天持有股票且进行过一次买入的最大利润。dp[i][2]第 i 天不持有股票且进行过一次买卖的最大利润。dp[i][3]第 i 天持有股票且进行过一次买卖和一次买入的最大利润。dp[i][4]第 i 天不持有股票且进行过两次买卖的最大利润。状态转移方程dp[i][0] dp[i-1][0]dp[i][1] max(dp[i-1][1], dp[i-1][0] - prices[i])dp[i][2] max(dp[i-1][2], dp[i-1][1] prices[i])dp[i][3] max(dp[i-1][3], dp[i-1][2] - prices[i])dp[i][4] max(dp[i-1][4], dp[i-1][3] prices[i])边界条件dp[0][0] 0dp[0][1] -prices[0]dp[0][2] 0dp[0][3] -prices[0]dp[0][4] 0最终结果是max(dp[n-1][0], dp[n-1][2], dp[n-1][4])其中 n 是数组的长度。复杂度分析时间复杂度O(n)其中 n 是数组的长度。只需要遍历一次数组。空间复杂度O(n)需要使用一个 n x 5 的二维数组来存储 dp 值。代码实现方法动态规划class Solution: def maxProfit(self, prices: List[int]) - int: # 处理边界情况 if not prices: return 0 # 初始化 dp 数组 n len(prices) dp [[0] * 5 for _ in range(n)] dp[0][0] 0 # 不持有股票没有交易 dp[0][1] -prices[0] # 持有股票一次买入 dp[0][2] 0 # 不持有股票一次买卖 dp[0][3] -prices[0] # 持有股票一次买卖一次买入 dp[0][4] 0 # 不持有股票两次买卖 # 计算 dp[i][*] for i in range(1, n): dp[i][0] dp[i-1][0] dp[i][1] max(dp[i-1][1], dp[i-1][0] - prices[i]) dp[i][2] max(dp[i-1][2], dp[i-1][1] prices[i]) dp[i][3] max(dp[i-1][3], dp[i-1][2] - prices[i]) dp[i][4] max(dp[i-1][4], dp[i-1][3] prices[i]) # 返回结果 return max(dp[n-1][0], dp[n-1][2], dp[n-1][4])测试用例测试用例 1输入prices [3,3,5,0,0,3,1,4]输出6测试用例 2输入prices [1,2,3,4,5]输出4测试用例 3输入prices [7,6,4,3,1]输出0总结本题是动态规划的经典问题主要考察对动态规划思想的理解和应用。通过定义状态和状态转移方程我们可以高效地计算出最多完成两笔交易的最大利润。动态规划的核心思想是将原问题分解为子问题并存储子问题的解以避免重复计算。这种方法不仅适用于买卖股票的最佳时机 III 问题还可以应用于许多其他需要递推的问题。掌握动态规划的原理对于理解算法设计思想非常重要。

相关文章:

LeetCode 123. Best Time to Buy and Sell Stock III 题解

LeetCode 123. Best Time to Buy and Sell Stock III 题解 题目描述 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意: 你不能同时参与多笔交易(你…...

吊打大模型幻觉!保姆级RAG原理+极简实战代码,新手一秒看懂

吊打大模型幻觉!保姆级RAG原理极简实战代码,新手一秒看懂 前言:拒绝晦涩干货,通俗讲透RAG 很多小伙伴初学大模型的时候,都会遇到一个让人崩溃的问题:AI瞎编乱造! 问它最新技术,它一问…...

音乐标签管理革命:告别混乱,拥抱智能音乐库

音乐标签管理革命:告别混乱,拥抱智能音乐库 【免费下载链接】music-tag-web 音乐标签编辑器,可编辑本地音乐文件的元数据(Editable local music file metadata.) 项目地址: https://gitcode.com/gh_mirrors/mu/music…...

智读致用|《一人企业》4|扩张不是战略,活下来才是

系列:《一人企业》读书笔记 第4章 书名:《一人企业:一个人也能赚钱的商业新模式》 作者:保罗贾维斯(Paul Jarvis) 所有人都在教你怎么做大。 融资、招人、开分公司、冲GMV——这套叙事太熟悉了&#xff0c…...

RSA参数生成实战秘籍:rsatool带你掌握密码学核心技能

RSA参数生成实战秘籍:rsatool带你掌握密码学核心技能 【免费下载链接】rsatool rsatool can be used to calculate RSA and RSA-CRT parameters 项目地址: https://gitcode.com/gh_mirrors/rs/rsatool 在密码学领域,RSA算法无疑是现代安全通信的基…...

Cursor AI编辑器使用体验优化方案:智能配置管理与功能扩展技术解析

Cursor AI编辑器使用体验优化方案:智能配置管理与功能扩展技术解析 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reac…...

原神帧率解锁终极指南:如何轻松突破60FPS限制享受流畅游戏体验

原神帧率解锁终极指南:如何轻松突破60FPS限制享受流畅游戏体验 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否厌倦了《原神》PC版60FPS的限制?当你的高刷新…...

Divinity Mod Manager:彻底解决《神界:原罪2》模组管理难题的完整方案

Divinity Mod Manager:彻底解决《神界:原罪2》模组管理难题的完整方案 【免费下载链接】DivinityModManager A mod manager for Divinity: Original Sin - Definitive Edition. 项目地址: https://gitcode.com/gh_mirrors/di/DivinityModManager …...

WeDLM-7B-Base GPU部署:NVIDIA Triton推理服务器封装与批量请求优化

WeDLM-7B-Base GPU部署:NVIDIA Triton推理服务器封装与批量请求优化 1. 模型概述与核心优势 WeDLM-7B-Base是一款基于扩散机制(Diffusion)的高性能基座语言模型,拥有70亿参数规模。该模型在标准因果注意力机制下实现了并行掩码恢…...

如何快速掌握音频频谱分析:Spek声学工具终极指南

如何快速掌握音频频谱分析:Spek声学工具终极指南 【免费下载链接】spek Acoustic spectrum analyser 项目地址: https://gitcode.com/gh_mirrors/sp/spek 你是否曾经好奇音乐中的高低频分布?或者想检查录音中的噪声问题?Spek就是你的答…...

D3KeyHelper:如何用智能按键管理解决暗黑3的五大操作难题

D3KeyHelper:如何用智能按键管理解决暗黑3的五大操作难题 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 在暗黑破坏神3的高强度游戏体验…...

FLUX.1-Krea-Extracted-LoRA快速上手:bash /root/start.sh启动原理与日志查看方法

FLUX.1-Krea-Extracted-LoRA快速上手:bash /root/start.sh启动原理与日志查看方法 1. 模型概述 FLUX.1-Krea-Extracted-LoRA 是一款基于 FLUX.1-dev 基础模型的真实感图像生成模型,通过提取的 LoRA 风格权重为图像注入专业摄影级别的真实感美学。该模型…...

单片机软件架构实战:从新手到高手的9种设计模式

1. 单片机软件架构入门&#xff1a;从main函数到模块化设计 刚接触单片机编程时&#xff0c;我们往往从一个简单的main函数开始。记得我第一次用51单片机点亮LED时&#xff0c;代码简单到只有十几行&#xff1a; #include <reg51.h> void main() {while(1) {P1 0x00; …...

基于Harness Engineering的零代码AI智能体开发平台Nexent深度解析

1. 项目概述&#xff1a;当“零代码”遇上“工程化”&#xff0c;AI智能体开发的新范式 最近在AI应用开发圈子里&#xff0c;一个词被反复提及&#xff1a; Agentic AI &#xff0c;或者说智能体。大家可能都体验过ChatGPT这类对话模型&#xff0c;它们能回答问题、写写代码&…...

AI智能体如何自主操作GitHub仓库:从代码理解到自动化PR全流程解析

1. 项目概述&#xff1a;当GitHub仓库成为你的AI智能体最近在AI应用开发圈里&#xff0c;一个名为open-gitagent/gitagent的项目开始被频繁提及。乍一看&#xff0c;它像是一个普通的GitHub仓库&#xff0c;但当你深入其中&#xff0c;会发现它试图解决一个非常具体且前沿的问题…...

基于Cognita框架构建企业级RAG知识库:从原理到生产部署全解析

1. 项目概述&#xff1a;当向量数据库遇上RAG&#xff0c;Cognita如何重塑企业知识管理最近在折腾企业内部的文档智能问答系统&#xff0c;相信很多同行都踩过类似的坑&#xff1a;费劲把PDF、Word、PPT这些非结构化文档灌进向量数据库&#xff0c;然后基于RAG&#xff08;检索…...

别再用FR4不行了!实测12G-SDI在普通PCB板材上的完整布线指南(附阻抗计算与AntiPad避坑)

别再用FR4不行了&#xff01;实测12G-SDI在普通PCB板材上的完整布线指南&#xff08;附阻抗计算与AntiPad避坑&#xff09; 在高速数字视频传输领域&#xff0c;12G-SDI作为4K/60fps内容的主流接口标准&#xff0c;其PCB设计一直被视为需要特殊高频板材的"贵族技术"。…...

5步完成高效MOOC课程离线下载:MoocDownloader终极指南

5步完成高效MOOC课程离线下载&#xff1a;MoocDownloader终极指南 【免费下载链接】MoocDownloader An MOOC downloader implemented by .NET. 一枚由 .NET 实现的 MOOC 下载器. 项目地址: https://gitcode.com/gh_mirrors/mo/MoocDownloader 您是否曾因网络不稳定而无法…...

Qianfan-OCR识别结果后处理实战:正则表达式与自然语言处理技巧

Qianfan-OCR识别结果后处理实战&#xff1a;正则表达式与自然语言处理技巧 1. 引言&#xff1a;为什么需要OCR后处理 OCR技术虽然已经相当成熟&#xff0c;但在实际应用中&#xff0c;识别结果往往存在各种问题。你可能遇到过这样的情况&#xff1a;从名片上扫描的电话号码多…...

AltSnap:Windows窗口管理革命,5分钟掌握高效桌面操作

AltSnap&#xff1a;Windows窗口管理革命&#xff0c;5分钟掌握高效桌面操作 【免费下载链接】AltSnap Maintained continuation of Stefan Sundins AltDrag 项目地址: https://gitcode.com/gh_mirrors/al/AltSnap 你是否曾在Windows中为精确点击窗口标题栏而烦恼&#…...

CSS 属性选择器

CSS 属性选择器 CSS 属性选择器是一种用于选择具有特定属性值的元素的选择器。通过属性选择器,开发者可以更加精确地控制页面中特定元素的外观和行为。本文将详细介绍 CSS 属性选择器的概念、使用方法和示例。 一、属性选择器的概念 属性选择器允许开发者根据元素所具有的属…...

Fairseq-Dense-13B-Janeway部署教程:开源可部署+GPU算力适配+镜像免配置三大优势实证

Fairseq-Dense-13B-Janeway部署教程&#xff1a;开源可部署GPU算力适配镜像免配置三大优势实证 1. 模型概述 Fairseq-Dense-13B-Janeway 是 KoboldAI 发布的 130 亿参数创意写作大模型&#xff0c;专门针对科幻与奇幻题材进行优化。该模型使用 2210 本科幻与奇幻题材电子书进…...

OpenModScan:工业自动化工程师必备的免费Modbus调试工具终极指南

OpenModScan&#xff1a;工业自动化工程师必备的免费Modbus调试工具终极指南 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan OpenModScan是一款功能强大的免费开源Modb…...

LFM2.5-1.2B-Instruct行业落地:跨境电商多语言商品描述自动生成

LFM2.5-1.2B-Instruct行业落地&#xff1a;跨境电商多语言商品描述自动生成 1. 模型介绍与部署准备 LFM2.5-1.2B-Instruct是一个1.2B参数量的轻量级指令微调大语言模型&#xff0c;特别适合在边缘设备或低资源服务器上运行。该模型支持8种主流语言&#xff0c;包括英语、中文…...

从数据标注到模型部署:基于YOLOv8+RT-DETR的车道抛洒物检测保姆级全流程(含labelImg使用教程)

车道抛洒物检测实战&#xff1a;从零构建YOLOv8与RT-DETR融合模型 项目背景与核心价值 高速公路和城市道路上突然出现的抛洒物&#xff08;如碎石、货物残渣、轮胎碎片&#xff09;是引发交通事故的重要隐患。传统人工巡检方式效率低下且成本高昂&#xff0c;而基于深度学习的实…...

Element UI项目里藏了个老版本lodash?手把手教你排查和修复这个原型污染漏洞

Element UI项目中隐藏的lodash漏洞&#xff1a;从定位到修复的完整指南 引言 最近一次例行安全扫描后&#xff0c;我的团队收到了一个令人不安的警报&#xff1a;我们的Vue项目存在lodash原型污染漏洞。奇怪的是&#xff0c;项目package.json中根本没有直接声明lodash依赖。经过…...

Nano-Banana Studio惊艳效果:复古画报风Sportswear suit爆炸图生成实录

Nano-Banana Studio惊艳效果&#xff1a;复古画报风Sportswear suit爆炸图生成实录 1. 引言&#xff1a;当AI遇见复古时尚设计 想象一下这样的场景&#xff1a;你正在为一款运动套装设计宣传材料&#xff0c;想要展示服装的每一个细节——从缝线工艺到面料纹理&#xff0c;从…...

Alice-Tools终极指南:如何快速破解游戏资源编辑的三大难题

Alice-Tools终极指南&#xff1a;如何快速破解游戏资源编辑的三大难题 【免费下载链接】alice-tools Tools for extracting/editing files from AliceSoft games. 项目地址: https://gitcode.com/gh_mirrors/al/alice-tools 你是否曾经因为无法打开游戏的特殊文件格式而…...

像素剧本圣殿实操手册:Qwen2.5-14B-Instruct输出剧本导入Final Draft兼容性测试

像素剧本圣殿实操手册&#xff1a;Qwen2.5-14B-Instruct输出剧本导入Final Draft兼容性测试 1. 工具介绍与核心功能 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是一款基于Qwen2.5-14B-Instruct大模型深度优化的专业剧本创作工具。这个工具将AI强大的文本生成能…...

TEdit地图编辑器完全指南:如何用开源工具10倍提升泰拉瑞亚建造效率

TEdit地图编辑器完全指南&#xff1a;如何用开源工具10倍提升泰拉瑞亚建造效率 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also…...