《LeetCode 152 乘积最大子数组 || LeetCode 413 等差数列划分》
一、题目二、做题思路2.1 状态表示核心基础本题要求计算数组中乘积最大的连续子数组。由于负数相乘可能反转大小关系仅记录最大乘积不够还需记录最小乘积。因此定义两个状态f[i]表示以nums[i]结尾的子数组的最大乘积。g[i]表示以nums[i]结尾的子数组的最小乘积。2.2 状态转移方程关键难点对于以nums[i]结尾的子数组有三种可能来源单独成为子数组即nums[i]自身。延续前一个最大乘积f[i-1] * nums[i]。延续前一个最小乘积g[i-1] * nums[i]当nums[i]为负数时乘以最小可能得最大。因此当前最大和最小乘积分别为三者中的最大值和最小值f[i] max(nums[i], f[i-1]*nums[i], g[i-1]*nums[i])g[i] min(nums[i], f[i-1]*nums[i], g[i-1]*nums[i])2.3 初始化边界防护第一个元素下标 0没有前驱因此f[0] g[0] nums[0]同时全局最大乘积ret初始化为nums[0]。2.4 填表顺序递推方向每个i状态仅依赖i-1的状态因此必须从左到右即i从 1 到n-1依次填充两个数组确保每个状态计算时其所有前置状态均已就绪。2.5 返回值目标映射题目要求返回整个数组中乘积最大的连续子数组的乘积即所有f[i]中的最大值。我们在递推过程中同步维护ret最终返回ret。三、代码class Solution { public: int maxProduct(vectorint nums) { int n nums.size(); // 边界处理若数组为空返回0题目一般保证非空但为健壮性加上 if (n 0) return 0; // 1. 创建dp表 // f[i] : 以 nums[i] 结尾的子数组的最大乘积 // g[i] : 以 nums[i] 结尾的子数组的最小乘积 // 维护最小乘积是因为负数乘以负数可能变成正数从而成为最大乘积 vectorint f(n); vectorint g(n); // 2. 初始化第一个元素结尾的最大和最小乘积都是 nums[0] f[0] g[0] nums[0]; int ret nums[0]; // 全局最大乘积 // 3. 填表顺序从左到右i 从 1 到 n-1因为 f[i] 依赖 f[i-1] 和 g[i-1] for (int i 1; i n; i) { int x nums[i]; // 单独成为子数组 int y f[i - 1] * nums[i]; // 乘以前一个最大乘积 int z g[i - 1] * nums[i]; // 乘以前一个最小乘积 // 4. 状态转移方程 // 当前最大乘积 max(单独, 最大乘当前, 最小乘当前) f[i] max(x, max(y, z)); // 当前最小乘积 min(单独, 最大乘当前, 最小乘当前) g[i] min(x, min(y, z)); // 更新全局最大乘积 ret max(ret, f[i]); } // 5. 返回值全局最大乘积 return ret; } };四、流程图五、题目六、做题思路6.1 状态表示核心基础本题要求计算数组中所有等差数列子数组的个数。由于等差数列子数组必须是连续的且长度至少为 3我们定义dp[i]表示以nums[i]结尾的等差数列子数组的个数。6.2 状态转移方程关键难点要判断以nums[i]结尾能否形成新的等差数列只需检查最后三个元素nums[i-2]、nums[i-1]、nums[i]是否构成等差即nums[i] - nums[i-1] nums[i-1] - nums[i-2]。若满足则以nums[i]结尾的等差数列数 以nums[i-1]结尾的等差数列数 1新增一个长度为 3 的子数组[nums[i-2], nums[i-1], nums[i]]同时之前的所有等差数列向后延伸一位也形成新的更长的数列。若不满足则无法形成新的等差数列dp[i] 0。因此方程dp[i] (nums[i] - nums[i-1] nums[i-1] - nums[i-2]) ? dp[i-1] 1 : 0。6.3 初始化边界防护长度小于 3 的数组不可能构成等差数列因此若n 3直接返回 0。对于dp[0]和dp[1]它们无法作为长度≥3 的结尾默认初始化为 0。6.4 填表顺序递推方向dp[i]仅依赖dp[i-1]和前两个元素因此必须从左到右即i从 2 到n-1依次填充dp表确保每个状态计算时其前置状态已就绪。6.5 返回值目标映射题目要求返回所有等差数列子数组的总个数。每个子数组都有唯一的结尾位置因此总数为所有dp[i]的累加和total sum(dp[i])i从 2 到n-1。我们在递推过程中累加dp[i]最终返回total。七、代码class Solution { public: int numberOfArithmeticSlices(vectorint nums) { int n nums.size(); // 若数组长度小于3不可能存在等差数列直接返回0题目保证n1但为健壮性加上 if (n 3) return 0; // 1. 创建dp表 // dp[i] 表示以 nums[i] 结尾的等差数列长度≥3的个数 // 例如 nums [1,2,3,4]dp[2]1[1,2,3]dp[3]2[2,3,4]和[1,2,3,4] vectorint dp(n, 0); int total 0; // 累计所有等差数列总数 // 2. 初始化dp[0]和dp[1]默认为0无需显式赋值 // 3. 填表顺序从左到右i从2到n-1因为dp[i]依赖dp[i-1]和前两个元素 for (int i 2; i n; i) { // 4. 状态转移方程 // 若当前三个连续元素构成等差数列nums[i]-nums[i-1] nums[i-1]-nums[i-2] // 则以i结尾的等差数列个数 以i-1结尾的个数 1新增的以[i-2,i-1,i]为结尾的长度为3的数列 // 否则无法形成新的等差数列dp[i] 0 dp[i] (nums[i] - nums[i - 1] nums[i - 1] - nums[i - 2]) ? dp[i - 1] 1 : 0; // 累加所有dp[i]即为总个数因为每个等差数列都有唯一结尾位置 total dp[i]; } // 5. 返回值累计的等差数列总数 return total; } };八、流程图

相关新闻

终极指南:15个WuWa-Mod模组如何彻底改变你的《鸣潮》游戏体验?

终极指南:15个WuWa-Mod模组如何彻底改变你的《鸣潮》游戏体验?

终极指南:15个WuWa-Mod模组如何彻底改变你的《鸣潮》游戏体验? 【免费下载链接】wuwa-mod Wuthering Waves pak mods 项目地址: https://gitcode.com/GitHub_Trending/wu/wuwa-mod 还在为《鸣潮》游戏中的重复刷怪、技能冷却和资源收集而烦恼吗&a…

2026/7/11 14:59:59阅读更多 →
Windows 10用户终于等到了:微软原生容器方案WSL Containers实测与部署详解

Windows 10用户终于等到了:微软原生容器方案WSL Containers实测与部署详解

年初微软悄然推出了一项让不少开发者眼前一亮的新能力——WSL Containers。这个名字听起来像是WSL的某个插件,实际上它是一个完全内嵌在Windows Subsystem for Linux里的原生容器平台。换句话说,你的Windows系统本身就能直接跑容器,不再需要额…

2026/7/11 14:59:59阅读更多 →
【代码随想录算法训练营第32天】动态规划part01 | 理论基础 | 509. 斐波那契数 | 70. 爬楼梯 | 746. 使用最小花费爬楼梯

【代码随想录算法训练营第32天】动态规划part01 | 理论基础 | 509. 斐波那契数 | 70. 爬楼梯 | 746. 使用最小花费爬楼梯

文章目录 KEY509. 斐波那契数完整代码 70. 爬楼梯整个代码: 746. 使用最小花费爬楼梯整个代码: KEY 简单,不用看这次的笔记。 509. 斐波那契数 太简单,不用管。 注意这个细节: if (n0) return 0; if (n1) return 1;…

2026/7/11 14:54:59阅读更多 →
别再手动汇流串线、画图纸了!光伏设计软件直接一键搞定

别再手动汇流串线、画图纸了!光伏设计软件直接一键搞定

以前做光伏设计,复杂的彩钢瓦屋顶屋面多、坡度杂、障碍物到处是。手动排组件、算支架、画图纸,光是基础工作就能熬夜一周。可能改了一版又一版,最后发现串线还有问题,图纸还得重来。但现在,我已经告别如此复杂的手动设…

2026/7/11 16:05:10阅读更多 →
Claude Code Agent Teams实战:从配置到项目开发的AI团队协作指南

Claude Code Agent Teams实战:从配置到项目开发的AI团队协作指南

如果你正在寻找一个真正能提升开发效率的AI协作工具,Claude Code Agent Teams可能是你2026年最值得投入学习的技术之一。但很多开发者第一次接触这个概念时都会陷入同样的误区:以为这只是简单的"多开几个AI窗口",结果在实际项目中要…

2026/7/11 16:05:10阅读更多 →
值传递vs引用传递:这道题我面了十次,每次都有人翻车

值传递vs引用传递:这道题我面了十次,每次都有人翻车

上周帮朋友面试,来了个硕士应届生,985的,简历上项目经验挺丰富,什么SLAM、路径规划都做过,看着挺有底气的。我想先热热身,问了个自认为很简单的问题:"你写一个函数,交换两个整数…

2026/7/11 16:05:10阅读更多 →
AutoRemesher自定义脚本编写:自动化工作流的实现方法

AutoRemesher自定义脚本编写:自动化工作流的实现方法

AutoRemesher自定义脚本编写:自动化工作流的实现方法 【免费下载链接】autoremesher Automatic quad remeshing tool 项目地址: https://gitcode.com/GitHub_Trending/au/autoremesher AutoRemesher是一款强大的跨平台自动四边形网格重拓扑工具,能…

2026/7/11 16:05:10阅读更多 →
2026 AI做歌软件买断版权价格及商用选购指南

2026 AI做歌软件买断版权价格及商用选购指南

很多人找AI做歌工具时,最核心的疑问集中在三点:能不能买断版权商用、不同工具价格差多少、国内日常使用哪款最稳妥。市面上“买断”的概念很容易混淆,有的是买断软件使用权,有的是买断单首作品版权,授权规则的差异直接…

2026/7/11 16:05:10阅读更多 →
革命性图像文本模型diffusiongemma-26B-A4B-it-OptiQ-4bit:如何在Apple Silicon上实现本地高效部署

革命性图像文本模型diffusiongemma-26B-A4B-it-OptiQ-4bit:如何在Apple Silicon上实现本地高效部署

革命性图像文本模型diffusiongemma-26B-A4B-it-OptiQ-4bit:如何在Apple Silicon上实现本地高效部署 【免费下载链接】diffusiongemma-26B-A4B-it-OptiQ-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/diffusiongemma-26B-A4B-it-OptiQ-4bit …

2026/7/11 16:00:09阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/10 12:10:00阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/11 15:18:12阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/11 15:11:32阅读更多 →
Premiere Pro 2025安装失败原因与AGSIS验证绕过指南

Premiere Pro 2025安装失败原因与AGSIS验证绕过指南

1. 为什么2025版PR安装比以往更“磨人”?——从弹窗警告到路径陷阱的真实处境 Premiere Pro 2025版不是简单的一次版本迭代,它是一道分水岭。我从去年底开始帮影视工作室、高校剪辑实验室和自由职业者部署2025环境,累计处理了137台设备&#…

2026/7/11 0:03:43阅读更多 →
5款实用macOS系统优化工具:让你的Mac运行更流畅更高效

5款实用macOS系统优化工具:让你的Mac运行更流畅更高效

5款实用macOS系统优化工具:让你的Mac运行更流畅更高效 【免费下载链接】open-source-mac-os-apps 🚀 Awesome list of open source applications for macOS. https://t.me/s/opensourcemacosapps 项目地址: https://gitcode.com/gh_mirrors/op/open-so…

2026/7/11 0:03:43阅读更多 →
5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:03:43阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/10 13:39:09阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/10 22:20:33阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/10 17:29:22阅读更多 →