hot100 除了自身以外数组的乘积(238)
📅 2026/7/1 15:17:20
👁️ 次浏览
本题采用前缀与后缀乘积空间复用算法解决“除自身以外数组的乘积”问题。其核心本质是在禁用除法的前提下利用输出数组直接存储前缀连续乘积并引入单个滚动变量逆向累乘后缀从而将传统多数组方案的额外空间复杂度由 O(n) 降低至 O(1)。该解法实现了时间与额外空间的双重理论极限最终走向是通过两次完备的线性扫描直接锁定目标乘积序列。一、 问题本质与数据模型对于长度为 n 的整数数组 nums设任意位置 i其中 0 i n的目标乘积为 answer[i]。根据题目定义answer[i] 等于该位置左侧所有元素的乘积前缀乘积与右侧所有元素的乘积后缀乘积的乘积。物理模型可拆解为Prefix[i] nums[0] * nums[1] * ... * nums[i-1] 约定 Prefix[0] 1Suffix[i] nums[i1] * nums[i2] * ... * nums[n-1] 约定 Suffix[n-1] 1answer[i] Prefix[i] * Suffix[i]传统方案需要分别开辟两个独立的空间为 O(n) 的辅助数组来存储 Prefix 和 Suffix。而本算法通过重用输出数组并配合动态变量彻底消除了额外辅助数组的开销。二、 算法演进对比在处理区间全量乘积去中心化问题时空间复用双向扫描法达成了资源配置的最优解解法名称时间复杂度空间复杂度核心原理物理瓶颈 / 缺陷除法扫描法O(n)O(1)先计算全局总乘积遍历时除以当前元素得到结果无法处理数组中包含元素 0 的特殊情况且违反题目禁用除法的物理约束暴力双重循环O(n^2)O(1)每到一个位置线性遍历其余 n-1 个元素并求乘积存在大量重叠区间的重复计算大数级样本下必然超时双辅助数组法O(n)O(n)开辟 PREFIX 和 SUFFIX 数组分别向前和向后累乘后进行对应相乘引入了两倍于输入规模的额外内存开销空间复用扫描当前解法O(n)O(1)利用返回数组替代 PREFIX 数组利用动态单变量滚动代替 SUFFIX 数组需进行正反两次完备的线性扫描三; 核心控制流逻辑推导提供的源码通过解耦前缀和后缀的计算分两步完成了对输出数组ans的构建1. 正向扫描构建前缀乘积控制循环for (int i 1; i nums.length; i)初始边界设定ans[0] 1。因为索引 0 左侧没有元素前缀乘积默认为 1。状态转移ans[i] ans[i - 1] * nums[i - 1]逻辑证明此时ans[i]严格等于nums[0]到nums[i-1]的连续累乘。当这轮循环结束时ans数组中已经保存了所有元素对应的完整前缀乘积。2. 逆向扫描融合后缀乘积控制循环for (int i nums.length - 1; i 0; i--)引入滚动变量r初始值为 1代表当前位置右侧所有元素的累乘和即后缀乘积。复合更新ans[i] * r此时ans[i]的值变为原有的前缀乘积 * 当前的后缀乘积 r直接完成了answer[i]的最终物理赋值。动态演进r * nums[i]更新后r融入了当前的nums[i]为左边下一个位置i-1的后缀乘积做好了数据准备。四、 算法执行状态机步进示例以输入数据nums [1, 2, 3, 4]为例算法内部各变量与ans数组的动态演进过程如下表所示阶段 / 步骤当前指针 i当前元素 nums[i]滚动变量 r 的值ans 数组实时状态物理意义说明初始化---[1, 0, 0, 0]设定首位前缀初始值正向第 1 步12-[1, 1, 0, 0]ans[1] ans[0] * nums[0] 1 * 1正向第 2 步23-[1, 1, 2, 0]ans[2] ans[1] * nums[1] 1 * 2正向第 3 步34-[1, 1, 2, 6]ans[3] ans[2] * nums[2] 2 * 3 (正向结束)逆向第 1 步341[1, 1, 2, 6]ans[3] * 1 - 6; r 更新为 1 * 4 4逆向第 2 步234[1, 1, 8, 6]ans[2] * 4 - 8; r 更新为 4 * 3 12逆向第 3 步1212[1, 12, 8, 6]ans[1] * 12 - 12; r 更新为 12 * 2 24逆向第 4 步0124[24, 12, 8, 6]ans[0] * 24 - 24; r 更新为 24 * 1 24五、源码实现class Solution { public int[] productExceptSelf(int[] nums) { // 创建结果数组根据空间复杂度分析原则该数组不计入额外空间开销 int[] ans new int[nums.length]; // 边界初始化第一个元素左边没有元素前缀乘积设定为 1 ans[0] 1; // 步骤 1正向遍历计算每个元素的所有前缀乘积 for (int i 1; i nums.length; i) { ans[i] ans[i - 1] * nums[i - 1]; } // 动态滚动变量 r用来实时维护当前元素右侧所有元素的连续乘积后缀乘积 int r 1; // 步骤 2逆向遍历将前缀乘积与动态生成的后缀乘积进行融合 for (int i nums.length - 1; i 0; i--) { // 当前位置的最终结果 已经存在数组中的前缀乘积 * 当前右侧的后缀乘积 ans[i] * r; // 滚动变量更新将当前元素纳入后缀乘积供左侧的下一个元素使用 r * nums[i]; } return ans; } }六、 复杂度极限分析1. 时间复杂度O(n)分析算法包含两个独立的、不嵌套的单层for循环。第一个循环从前往后遍历长度为 n 的数组执行次数为 n-1 次第二个循环从后往前逆序遍历数组执行次数为 n 次。两轮遍历中的基础操作均为单次的常数阶乘法运算O(1)。结论总体总基本操作次数与输入数据规模 n 呈线性正比关系时间复杂度为稳定的 O(n)。2. 空间复杂度O(1)分析根据题目设定的空间复杂度分析原则输出数组ans作为返回值不被计入额外的物理空间开销。在算法执行期间除返回值外仅独立申请了一个基础类型的整型滚动变量r以及循环控制变量i。结论算法所额外分配的物理内存空间完全恒定不随输入规模 n 的扩大而产生任何增长空间复杂度达到了 O(1) 阶的极限原地状态。
《冰雪传奇点卡版》运营单位名称:安徽游昕网络科技有限公司
游戏由安徽游昕网络科技有限公司负责运营,2026 年 7 月《冰雪传奇点卡版》官方最新官网主站为https://mjhy887.com,该站点由安徽游昕运营,作为官方正版信息发布与客户端下载入口&am…
📅 2026/7/1 15:17:20
1. 项目概述:这不是又一篇“遗传算法入门”——它专治你学完Part One后依然不会动手的痛点 “遗传算法入门”这六个字,我见过太多人点开、划到一半、关掉。不是内容不专业,而是绝大多数教程卡在Part One就停了:讲完生物类比、选择…
📅 2026/7/1 15:17:20
做过支付对接的开发者应该都懂那种感觉——文档打开十几个标签页,接口文档翻了一遍又一遍,签名就是不对,社区搜不到原因,群里问也没人回,只能自己对着屏幕硬熬到天亮。最近在梳理支付系统对接的工程化方案时࿰…
📅 2026/7/1 15:17:20
7.4V/8.4V 双节串联锂电池充电管理芯片方案实测整理升压 / 降压 / 升降压拓扑一次说清,附电路图与 BOM 清单做两节串联锂电(7.4V/8.4V)产品,保护板只是基础,充电电路才是真正让人挠头的地方。5V USB 怎么给 8.4V 电池包…
📅 2026/7/1 16:41:45
XHS-Downloader终极指南:5分钟掌握小红书内容采集神器 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接&…
📅 2026/7/1 16:41:45
Python小红书数据采集入门指南:3分钟掌握xhs工具核心用法 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs
想要轻松获取小红书公开数据却不知从何入手?…
📅 2026/7/1 16:41:45
重新定义Windows桌面美学:TranslucentTB透明任务栏深度解析 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB
你是否曾对Window…
📅 2026/7/1 16:41:45
核心洞察:2026年6月23日,Anthropic 发布 Claude Tag——将 Claude 直接嵌入 Slack 频道的"常驻 AI 同事"。它不是又一个聊天窗口,而是共享身份、持续记忆、异步工作、权限隔离的系统级设计。Anthropic 内部 65% 的产品代码变更已由 Claude Tag 自动审批和合并。这…
📅 2026/7/1 16:41:45
3步搭建免费数字标牌系统:LibreSignage让你的旧设备变身专业广告屏 【免费下载链接】LibreSignage A free and open source digital signage solution. 项目地址: https://gitcode.com/gh_mirrors/li/LibreSignage
还在为昂贵的数字标牌系统发愁吗࿱…
📅 2026/7/1 16:39:45
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/1 0:00:39
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/1 0:00:39
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/1 0:00:39
6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…
📅 2026/6/30 10:04:37
引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…
📅 2026/7/1 15:35:39
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/1 0:00:39
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/1 0:00:39
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/1 0:00:39