动态规划专练:力扣第123、188题
力扣第123题-买卖股票的最佳时机Ⅲ1.本题的难点在于如何处理“2次买卖”还是可以将当天的状态分为4种1第一次持有股票。要么是之前已经买入要么是之前没有而当天买入递推公式为dp[1][0] fmax(dp[0][0], -prices[i])。2第一次未持有股票。要么是之前就已经卖出要么是之前持有今天卖出递推公式为dp[1][1] fmax(dp[0][1], dp[0][0] prices[i])。3第二次持有股票。从第二次开始的状态就需要建立在“完成了第一次买卖”之上来考虑要么是第一次卖出后在今天以前已经买入要么是之前没有而当天买入递推公式为dp[1][2] fmax(dp[0][2], dp[0][1] - prices[i])。4第二次未持有股票。要么是之前就已经卖出第二次的股票要么是之前持有今天卖出递推公式为dp[1][3] fmax(dp[0][3], dp[0][2] prices[i])。2.基于以上思想可写出完整代码如下1. int maxProfit(int* prices, int pricesSize) { 2. // dp[0][0]当前持有第1支股票 3. // dp[0][1]卖出第1支股票完成1笔交易 4. // dp[0][2]当前持有第2支股票 5. // dp[0][3]卖出第2支股票完成2笔交易 6. int dp[2][4]; 7. // 初始化第0天四种状态 8. dp[0][0] -prices[0]; // 第一天买入第一支 9. dp[0][1] 0; // 不可能卖出收益0 10. dp[0][2] -prices[0];// 当天买入再卖出再买入第二支等价直接买 11. dp[0][3] 0; // 不可能完成两次卖出 12. 13. for (int i 1; i pricesSize; i){ 14. // 状态0第一次持有要么之前就持有要么今天刚买入 15. dp[1][0] fmax(dp[0][0], -prices[i]); 16. // 状态1第一次卖出要么之前已卖出要么今天卖出第一次持仓 17. dp[1][1] fmax(dp[0][1], dp[0][0] prices[i]); 18. // 状态2第二次持有要么之前持有第二支要么第一次卖出后今天买入 19. dp[1][2] fmax(dp[0][2], dp[0][1] - prices[i]); 20. // 状态3第二次卖出要么之前完成两笔要么今天卖出第二次持仓 21. dp[1][3] fmax(dp[0][3], dp[0][2] prices[i]); 22. 23. // 更新前一天状态为当前天滚动数组压缩空间 24. dp[0][0] dp[1][0]; 25. dp[0][1] dp[1][1]; 26. dp[0][2] dp[1][2]; 27. dp[0][3] dp[1][3]; 28. } 29. 30. // 最多两次交易最大收益一定是完成两次卖出的状态 31. return dp[0][3]; 32. }该算法时间复杂度为O(n)空间复杂度为O(1)。力扣第188题-买卖股票的最佳时机Ⅳ1.本题相比于力扣第123题-买卖股票的最佳时机Ⅲ区别仅在于将允许买卖的次数从2次变为了k次本质还是没有变只需要设置2k个状态来记录第k次持有/未持有时的最大金额。递推公式也都是从上一个状态中得到的。完整代码如下1. int maxProfit(int k, int* prices, int pricesSize) { 2. // dp[0][j*2]持有第j1次买入的股票 3. // dp[0][j*21]完成第j1次完整交易已卖出 4. // 滚动数组dp[2][2k]只保存前一天和当天状态 5. int dp[2][k * 2]; 6. // 第0天初始化所有交易状态 7. for (int i 0; i k; i){ 8. dp[0][i * 2] -prices[0]; // 当天买入第i1笔 9. dp[0][i * 2 1] 0; // 无法卖出收益为0 10. } 11. 12. // 从第2天开始遍历价格数组 13. for (int i 1; i pricesSize; i){ 14. // 遍历k次交易的两种状态 15. for (int j 0; j k; j){ 16. if (j 0) { 17. // 第一次持仓之前持有 或 今日首次买入 18. dp[1][0] fmax(dp[0][0], -prices[i]); 19. } else { 20. // 非首次持仓之前持有该笔 或 上一笔卖出后今日买入 21. dp[1][j * 2] fmax(dp[0][j * 2], dp[0][j * 2 - 1] - prices[i]); 22. } 23. // 第j1次卖出之前已完成该笔交易 或 今日卖出当前持仓 24. dp[1][j * 2 1] fmax(dp[0][j * 2 1], dp[0][j * 2] prices[i]); 25. 26. // 滚动更新前一天状态为当天状态 27. dp[0][j * 2] dp[1][j * 2]; 28. dp[0][j * 2 1] dp[1][j * 2 1]; 29. } 30. } 31. 32. // 最大收益为最多k次交易全部卖出的状态 33. return dp[0][k * 2 - 1]; 34. }该算法时间复杂度为O(n * k)空间复杂度为O(k)。

相关新闻

Qt Creator编码设置全解析:告别乱码,实现跨平台开发一致性

Qt Creator编码设置全解析:告别乱码,实现跨平台开发一致性

1. 项目概述:为什么Qt Creator的编码设置如此关键? 如果你在Qt Creator里写过带中文的代码,大概率遇到过那个经典的“烫烫烫”乱码,或者编译时蹦出一堆你看不懂的编码错误。这问题看似简单,背后却牵扯到编辑器、编译器…

2026/8/12 18:00:17 阅读更多 →
Go 底层心智模型:并发、内存与闭包

Go 底层心智模型:并发、内存与闭包

写给已经能写 Go 但想知道"为什么"的人。这篇文章不讲语法,只聊机制。一、并发不是并行 很多人把这两个词当同义词用。Rob Pike 那句 “Concurrency is not parallelism” 被引用了无数遍,但真正能在白板上画清楚的人不多。 并发是程序的结构—…

2026/8/12 18:00:17 阅读更多 →
从G318自驾看工程思维:需求分析、技术选型与风险管理实战

从G318自驾看工程思维:需求分析、技术选型与风险管理实战

在技术博客领域,我们通常讨论的是代码、架构和算法。然而,技术人的成长与生活体验、思维突破同样密不可分。本文将以一次特殊的“项目”为引子,探讨如何将工程思维应用于非技术领域的复杂挑战,并从中提炼出对技术工作有启发的实践…

2026/8/12 18:00:17 阅读更多 →

最新新闻

HarmonyOS7 弹性布局处理异常文案:ArkUI/ArkTS 实战拆解

HarmonyOS7 弹性布局处理异常文案:ArkUI/ArkTS 实战拆解

文章目录前言为什么布局一碰到长文案就容易露馅场景:消息中心的异常通知卡片布局策略实操步骤先把卡片里谁不能退让想清楚完整示例:可承受长文案的通知列表把关键代码一段段拆开容易踩坑的点优化建议异常文案要按信息优先级让位写在最后前言 异常文案是…

2026/8/12 20:05:23 阅读更多 →
基于MCP与Trae的Playwright浏览器自动化:AI智能体驱动的新范式

基于MCP与Trae的Playwright浏览器自动化:AI智能体驱动的新范式

1. 项目概述:当Playwright遇见MCP与Trae,浏览器自动化的新范式如果你和我一样,长期在Web自动化、爬虫或者前端测试的泥潭里摸爬滚打,那你一定对“浏览器自动化”这个词又爱又恨。爱的是它解放了双手,能处理大量重复的页…

2026/8/12 20:05:23 阅读更多 →
HarmonyOS7 页面骨架如何做成组件:ArkUI/ArkTS 实战拆解

HarmonyOS7 页面骨架如何做成组件:ArkUI/ArkTS 实战拆解

文章目录前言为什么这个问题经常被写乱场景:资讯列表首屏加载骨架块设计实操步骤先把页面目标想清楚完整示例:资讯卡片骨架组件把关键代码一段段拆开容易踩坑的点优化建议骨架组件要轻,但不能失真写在最后前言 骨架屏不是灰色占位块越多越专…

2026/8/12 20:05:23 阅读更多 →
Java项目第三方依赖安全扫描实战:Dependency-Check工具详解与CI/CD集成

Java项目第三方依赖安全扫描实战:Dependency-Check工具详解与CI/CD集成

1. 项目概述:为什么你的Java项目需要一个“安全门卫” 最近在给一个老项目做安全审计,发现一个挺普遍但容易被忽视的问题:项目里用到的第三方库,版本老得能进博物馆了,里面藏着好几个高危漏洞,而团队里居然…

2026/8/12 20:05:23 阅读更多 →
Claude Code CLI:将AI代码助手融入命令行工作流

Claude Code CLI:将AI代码助手融入命令行工作流

1. 项目概述:当AI代码助手遇上命令行最近在折腾一个老项目的代码重构,面对几千个文件,想快速找出所有使用了某个特定废弃API的地方。第一反应是打开终端,敲下熟悉的grep -r “old_function_name” .。但转念一想,这次要…

2026/8/12 20:05:23 阅读更多 →
55-工厂6S落地工具体系化构建研究:全流程五大阶段与七大核心工具 | 杨逢昌

55-工厂6S落地工具体系化构建研究:全流程五大阶段与七大核心工具 | 杨逢昌

《6S管理实战专栏》 三环实战篇(第55篇) 杨逢昌使命: 用6S的力量,让10万名朋友实现高效愉悦的生活与工作。摘要6S 管理在制造企业应用广泛,但普遍存在 "从零摸索、工具零散、不成体系" 的问题,严…

2026/8/12 20:04:23 阅读更多 →

日新闻

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

1. 为什么需要一个“目录树”工具?在Linux世界里,尤其是Ubuntu这样的发行版,命令行是很多人的主战场。我们每天都要和文件、目录打交道。ls命令是查看目录内容的首选,它简洁、高效,能列出文件名、权限、大小等关键信息…

2026/8/12 9:33:34 阅读更多 →
博思AI智能体:意图识别、思考链与性能优化的工程实践

博思AI智能体:意图识别、思考链与性能优化的工程实践

在AI应用从“能用”走向“好用”的进程中,系统的响应速度、决策透明度与高并发稳定性是决定用户体验的关键。博思AI智能体近期完成了一次重要的专项优化,聚焦于意图识别、思考链展示与全链路压测三大核心领域,将系统从功能实现推向了工程卓越…

2026/8/12 9:33:34 阅读更多 →
子代理架构:AI智能体任务分解与协同执行的核心原理与实践

子代理架构:AI智能体任务分解与协同执行的核心原理与实践

1. 项目概述:为什么我们需要“子代理”?最近在折腾各种AI应用和自动化流程时,我越来越频繁地遇到一个瓶颈:单个AI智能体(Agent)的能力边界。无论是处理复杂的多步骤任务,还是需要同时调用多个专…

2026/8/12 9:33:34 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/12 1:11:09 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 1:11:09 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/12 1:11:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/12 1:11:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →