《LeetCode 152 乘积最大子数组 || LeetCode 413 等差数列划分》
📅 2026/7/11 15:00:03
👁️ 次浏览
一、题目二、做题思路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模组如何彻底改变你的《鸣潮》游戏体验? 【免费下载链接】wuwa-mod Wuthering Waves pak mods 项目地址: https://gitcode.com/GitHub_Trending/wu/wuwa-mod
还在为《鸣潮》游戏中的重复刷怪、技能冷却和资源收集而烦恼吗&a…
📅 2026/7/11 15:00:03
年初微软悄然推出了一项让不少开发者眼前一亮的新能力——WSL Containers。这个名字听起来像是WSL的某个插件,实际上它是一个完全内嵌在Windows Subsystem for Linux里的原生容器平台。换句话说,你的Windows系统本身就能直接跑容器,不再需要额…
📅 2026/7/11 15:00:03
5分钟学会:Buzz音频转录工具的完整入门指南,让你轻松实现100%离线语音转文字 【免费下载链接】buzz Buzz transcribes and translates audio offline on your personal computer. Powered by OpenAIs Whisper. 项目地址: https://gitcode.com/GitHub_T…
📅 2026/7/11 14:59:02
面对日益严格的内容审核与版权保护机制,寻找既优质又合规的视觉素材已成为内容创作的刚需。为解决“找不到、不敢用”的痛点,卓特视觉(Droitstock)应运而生。本文为您深度解析2026年值得关注的10款素材平台,涵盖从免费…
📅 2026/7/11 15:53:31
OptiScaler终极指南:3个技巧让所有显卡享受AI超分辨率与帧生成 【免费下载链接】OptiScaler OptiScaler bridges upscaling/frame gen across GPUs. Supports DLSS2/XeSS/FSR2 inputs, replaces native upscalers, enables FSR-FG/XeFG on non-FG titles. Supports …
📅 2026/7/11 15:53:31
MateCloud监控告警:Prometheus Grafana全方位监控体系 【免费下载链接】matecloud 🔥MateCloud是一款基于Spring Cloud Alibaba的微服务架构。目前已经整合Spring Boot 4.0.7、 SpringCloud 2025、Spring Cloud Alibaba 2025、Spring Security Oauth2、…
📅 2026/7/11 15:53:31
从零开始使用AMD-Quark量化自己的大语言模型:完整教程 【免费下载链接】Qwen3-30B-A3B-Thinking-2507-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Qwen3-30B-A3B-Thinking-2507-FP8
想要让你的大语言模型在AMD硬件上运行更快、更高效吗ÿ…
📅 2026/7/11 15:53:31
mlx-community/gpt-oss-20b-OptiQ-4bit进阶:如何通过mlx-lm实现自定义文本生成采样策略 【免费下载链接】gpt-oss-20b-OptiQ-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/gpt-oss-20b-OptiQ-4bit
想要充分发挥 gpt-oss-20b-OptiQ-4bit…
📅 2026/7/11 15:53:31
1. 项目概述:高精度信号采集系统设计 在工业自动化、医疗设备和测试测量领域,16位ADC(模数转换器)搭配高性能MCU的方案已成为精密信号采集的黄金标准。ADS8665作为TI推出的16位1MSPS SAR型ADC,配合STM32F413RH的硬件SP…
📅 2026/7/11 15:52:31
摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计…
📅 2026/7/11 0:00:31
1. 命令简介gpm 是 Linux 系统下运行于虚拟控制台(文字终端模式)的鼠标服务器。它的主要功能是在没有图形界面的纯文本环境中,为虚拟控制台提供鼠标支持,允许用户使用鼠标进行文本的选择、复制和粘贴操作,极大地提升了…
📅 2026/7/11 0:00:31
导语
先澄清一个常被混用的概念:BI试点"上线",并不等于试点"验收通过"。很多企业把仪表板做出来、账号发下去、培训开完场,就默认试点已经跑通,随后进入推广阶段——结果推广到第二个部门、第三个业务线时&am…
📅 2026/7/11 0:00:31
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/10 22:46:54
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/10 22:46:54
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/10 22:46:54
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/10 22:46:54
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/10 22:46:54
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/10 22:46:54