LeetCode数组乘积问题:前缀积与后缀积解法详解

发布时间:2026/10/31 9:08:44

LeetCode数组乘积问题:前缀积与后缀积解法详解 1. 问题背景与核心挑战今天要讨论的是LeetCode热题HOT100中的一道经典数组操作题目——除自身以外数组的乘积。这道题在面试中出现频率极高考察的是对数组遍历和空间复杂度的掌控能力。题目要求我们给定一个整数数组nums返回一个数组answer其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。这个问题的难点在于不能使用除法运算题目明确限制时间复杂度必须控制在O(n)空间复杂度除输出数组外需为O(1)进阶要求我第一次遇到这个问题时直观想到的暴力解法是对于每个元素都遍历整个数组计算乘积但这样时间复杂度会达到O(n²)显然不符合要求。后来经过反复推敲发现可以通过前缀积和后缀积的巧妙组合来优化。2. 算法思路解析2.1 前缀积与后缀积的概念解决这个问题的关键在于理解前缀积Prefix Product和后缀积Suffix Product前缀积表示数组从开始到当前元素前一个位置所有元素的乘积后缀积表示从当前元素后一个位置到数组末尾所有元素的乘积以数组[1,2,3,4]为例对于元素2索引1其前缀积是1后缀积是3×412对于元素3索引2其前缀积是1×22后缀积是42.2 空间优化策略最直观的解法是分别计算并存储每个元素的前缀积和后缀积然后将两者相乘得到最终结果。但这样需要额外的两个数组空间复杂度为O(n)。进阶解法通过复用输出数组来实现O(1)空间复杂度不考虑输出数组先用输出数组存储前缀积再用一个变量动态计算后缀积同时更新输出数组3. 具体实现步骤3.1 基础实现空间复杂度O(n)def productExceptSelf(nums): n len(nums) prefix [1] * n suffix [1] * n answer [1] * n # 计算前缀积 for i in range(1, n): prefix[i] prefix[i-1] * nums[i-1] # 计算后缀积 for i in range(n-2, -1, -1): suffix[i] suffix[i1] * nums[i1] # 合并结果 for i in range(n): answer[i] prefix[i] * suffix[i] return answer3.2 优化实现空间复杂度O(1)def productExceptSelf(nums): n len(nums) answer [1] * n # 先用answer存储前缀积 for i in range(1, n): answer[i] answer[i-1] * nums[i-1] # 动态计算后缀积并更新answer suffix 1 for i in range(n-1, -1, -1): answer[i] * suffix suffix * nums[i] return answer4. 复杂度分析与边界情况4.1 时间复杂度两种实现方式都只需要两次遍历数组时间复杂度均为O(n)。4.2 空间复杂度基础实现使用了prefix和suffix两个额外数组空间复杂度O(n)优化实现仅使用常数空间存储suffix空间复杂度O(1)不考虑输出数组4.3 边界情况处理空数组直接返回空数组单元素数组返回[1]因为没有任何其他元素包含0的数组需要特别注意但题目保证乘积不会溢出32位整数范围5. 常见错误与调试技巧5.1 典型错误忘记初始化前缀/后缀数组的第一个/最后一个元素在优化实现中后缀积计算时没有正确更新suffix变量索引越界特别是在处理边界元素时5.2 调试建议对于小数组如[1,2,3,4]手动计算每一步的结果打印中间变量prefix、suffix检查是否正确特别注意循环的起始和终止条件6. 算法扩展与变种6.1 允许使用除法的情况如果题目允许使用除法可以先计算所有元素的乘积然后对于每个元素用总乘积除以当前元素。但需要注意数组中可能有0需要特殊处理题目通常明确禁止使用除法6.2 多维数组扩展这个问题可以扩展到二维矩阵计算除当前元素外所有行和列的乘积。思路类似但需要分别计算行前缀积和列前缀积。7. 实际应用场景这种算法思想在以下场景中有实际应用图像处理中的邻域计算统计学中的滑动窗口计算金融分析中的累积收益率计算8. 个人实现心得在实际编码时我发现以下几点特别重要先写出基础解法确保逻辑正确再考虑优化画图辅助理解前缀和后缀的关系对于优化解法特别注意更新变量的顺序重要提示在面试中建议先解释基础解法再提出优化思路最后实现优化解法。这能展示你的思考过程。
延伸阅读

更多相关文章

2026/10/31 9:08:44

AI编程工具核心原理与架构拆解:从代码补全到Agent型工具

写在前面的几句实话:我大概是 2023 年初开始系统性用 AI 编程工具的,从 Copilot 的代码补全一路用到现在的各类 Agent 模式产品。这几年工具迭代快得离谱,网上教程却大多停留在“怎么装、怎么点”的层面,很少有人讲清楚背后的原理…

2026/10/31 9:08:44

坐标压缩+BFS求稀疏障碍网格连通区域面积

这道题我第一次看到的时候,题面其实没写完,停在"正方形草地位于直角坐标系中"就断了。但就这半句话,已经足够让我判断出它属于哪一类问题:大坐标、稀疏障碍、求连通区域面积。这类题在区域赛和各类在线评测里反复出现&a…

2026/10/31 9:03:44

VC调用WebService实战:SOAP Toolkit COM组件请求与排错

简介:围绕VC调用Web Service的示例文档,面向需要在桌面程序中集成远程接口的C开发者,重点演示借助COM组件与SOAP协议完成一次短信服务调用。内容依次说明HTTP连接器建立连接、设置服务终结点与操作名、创建序列化对象构造SOAP信封和消息体&am…

2026/10/31 10:18:52

知识付费小程序开发指南与技术评测

1. 2026年知识付费小程序平台全景观察 知识付费行业经过近十年的发展,已经从最初的音频课程裂变为覆盖图文、视频、直播、社群等多种形态的完整生态。根据最新行业白皮书显示,2025年国内知识付费市场规模预计突破2800亿元,其中小程序渠道占比…

2026/10/31 10:18:52

OpenRig自动绑定:从骨架权重到控制器的角色绑定高效方案

1. 为什么我放弃了手动绑定:一个绑定师的日常困境 上个月接了个活,一只修长四肢的人形机械角色,模型是外包用RetopoFlow重新拓扑过的,布线一半四边形一半三角形,文件里还残留着一层没删干净的AO贴图。甲方给了五天工期…

2026/10/31 10:18:52

企业微信多账号管理系统架构与实战优化

1. 私域运营的核心痛点与多账号管理挑战 私域流量运营已经成为现代企业营销的标配,但实际操作中最大的困扰莫过于账号管理。我见过太多团队每天要切换十几个微信号,手动复制粘贴相同内容到不同群聊,不仅效率低下还容易发错消息。更糟的是&…

2026/10/31 10:18:52

PostGIS安装与使用指南:空间数据库扩展

1. PostGIS简介与安装准备 PostGIS是PostgreSQL数据库的空间数据扩展,它为PostgreSQL添加了对地理对象的支持,使PostgreSQL成为一个功能强大的空间数据库。PostGIS实现了Open Geospatial Consortium (OGC)的Simple Features规范,并提供了丰富…

2026/10/31 10:18:52

Java高频坑排查地图:从语义、并发到框架的定位顺序

社区问答区里泡久了,你会发现 Java 板块的提问翻来覆去就那么几类:一段代码跑出来的结果和预期不一样、线上偶发一个说不清的异常、某个注解加了却像没加。标题起得五花八门,点进去看,根子大多落在几个老地方——对象语义没吃透、…

2026/10/31 10:13:52

NCRE三级数据库安全管理7大核心技能解析

1. 项目概述 全国计算机等级考试(NCRE)三级数据库技术是面向计算机专业学生和IT从业者的重要认证考试,其中第9章"安全管理"作为数据库系统的核心模块,占据了考试约15%的分值比重。这一章节不仅考察理论知识,…

2026/10/30 20:55:10

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/30 20:55:10

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/30 20:55:09

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/31 0:02:41

猫狗目标检测数据集:VOC/COCO/YOLO三格式一体化实战包

简介:本资源是一套面向计算机视觉初学者与YOLO目标检测实践者的猫狗图像数据集及配套开发工具包,专为快速上手目标检测模型训练而设计。资源包含1000张真实场景高清猫狗图片,标注质量高,同时提供VOC(XML)、…

2026/10/31 0:02:41

HDU2017多校标程复现:算法竞赛工程化真题沙盒

简介:本资源为2017年HDU多校联合训练第一场官方配套资料,面向ACM程序设计竞赛备赛学生、算法爱好者及高校编程集训队成员,旨在提供权威解题参考与完整测试验证环境。压缩包共40个文件,含15份C标程(覆盖全部赛题&#x…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑