当前位置: 首页 > news >正文

算法题-24

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除了 nums[i] 之外其余各元素的乘积 。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。请不要使用除法,且在 O(n) 时间复杂度内完成此题。

示例 1:
输入: nums = [1,2,3,4]
输出: [24,12,8,6]
示例 2:
输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]

如果直接计算:对于每个位置都遍历一次数组:O(n²)不符合要求。
关键观察,对于某个位置 i:结果 = 左边所有数乘积 × 右边所有数乘积
例如:nums = [1,2,3,4],求 answer[2]= (1×2) × (4),因此可以拆成:前缀乘积(left),后缀乘积(right)如果直接计算:对于每个位置都遍历一次数组:O(n²),不符合要求。
关键观察,对于某个位置 i:结果 = 左边所有数乘积 × 右边所有数乘积
例如:nums = [1,2,3,4]求 answer[2]= (1×2) × (4)

因此可以拆成:前缀乘积(left),后缀乘积(right)

计算左乘积

ileft
01
11
22
36

计算右乘积,right = [24,12,4,1]

var productExceptSelf = function(nums) { const n = nums.length; const left = new Array(n); const right = new Array(n); const ans = new Array(n); left[0] = 1; for (let i = 1; i < n; i++) { left[i] = left[i - 1] * nums[i - 1]; } right[n - 1] = 1; for (let i = n - 2; i >= 0; i--) { right[i] = right[i + 1] * nums[i + 1]; } for (let i = 0; i < n; i++) { ans[i] = left[i] * right[i]; } return ans; };

我们发现:left 数组其实可以直接存进 answer 里!因为:answer[i] 最终一定要包含 left[i],所以:answer 先当 left 用。我们可以把其空间复杂度变为O(1),但是我们的右乘积要想办法存进去。

我们用:一个变量 right来边走边算右乘积。
为什么可行?右乘积是:i 右边所有数的乘积,如果从右往左走:right *= nums[i],就能不断累计。
初始化let right = 1(最后一个右边为空)
从右往左遍历

for(let i = n - 1; i >= 0; i--){ answer[i] = answer[i] * right right *= nums[i] }
var productExceptSelf = function(nums) { const n = nums.length const answer = new Array(n) // ① 左乘积 answer[0] = 1 for(let i = 1; i < n; i++){ answer[i] = answer[i - 1] * nums[i - 1] } // ② 右乘积(滚动变量) let right = 1 for(let i = n - 1; i >= 0; i--){ answer[i] *= right right *= nums[i] } return answer };

先用 answer 存前缀积,再用一个变量滚动计算后缀积并乘进去,从而避免额外数组。

http://www.jsqmd.com/news/421691/

相关文章:

  • 教学设备怎么选?这5家四川本土品牌兼顾合规、性价比与售后 - 深度智识库
  • 基于flask的健身助手系统 教练预约系统-vue pycharm django
  • 基于flask的河南庙会文化艺术展示与定制-vue pycharm django
  • linux进程和端口相关命令
  • 全网热议!2026年口碑好的抖音直播代运营企业推荐榜单 - 睿易优选
  • 基于flask 的人工智能研讨社区系统-vue pycharm django
  • 金属制品企业哪家强?政企采购必看的Top5优质厂家推荐 - 深度智识库
  • 为什么比话降AI敢承诺不达标退款?背后的技术逻辑 - 还在做实验的师兄
  • 2026年高校论文AI率标准解读:本科硕士博士各是多少 - 还在做实验的师兄
  • 基于flask 的学生网上选课系统的设计-vue pycharm django
  • 2026年水泥管钢筋笼绕筋机/滚焊机/水泥管绕筋机厂家推荐:青州市诚意重工机械有限公司全系供应 - 品牌推荐官
  • Win10/11访问共享提示“你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问”(已解决)
  • 留学中介TOP10 文书逻辑哪家强: 招生官视角看这就懂了 - 博客湾
  • 比话降AI和学术猹哪个好?知网实测数据全面对比 - 还在做实验的师兄
  • OpenCSG月度更新2026.2
  • 比话降AI批量处理教程:多篇论文同时降AI怎么操作 - 还在做实验的师兄
  • 金属制品哪家好?西南地区政企批量采购避坑指南与Top5高性价比厂家推荐 - 深度智识库
  • 2026年水泵/新风/电气/高低压/恒压供水/PLC控制柜厂家推荐:青岛乐控电气自动化技术有限公司 - 品牌推荐官
  • 2026年家用/大吸力/节能油烟机推荐:德国罗西欧电气集团,全品类吸油烟机解决方案 - 品牌推荐官
  • 商汤正式进入MSCI中国指数,商汤入选意味着什么?
  • 四川教学设备选哪家?这5家本土企业凭实力霸榜 - 深度智识库
  • 2026年儿童近视防控专业推荐:至美上品视光,离焦镜/防控眼镜/青少年近视防控方案全解析 - 品牌推荐官
  • 必看!2026年青岛环保无纺布源头厂家、医用无纺布源头厂家精选! - 睿易优选
  • 2026年油烟机品牌推荐:健康厨电品牌大吸力/油烟分离/家用抽油烟机全系产品解析 - 品牌推荐官
  • 2026年硕士论文AI率超标被退回?紧急补救全流程 - 还在做实验的师兄
  • Win11 nodejs配置npm全局路径和缓存目录
  • 2026年CAAC无人机培训权威推荐:重庆新锐通航专业培训,覆盖多领域应用场景 - 品牌推荐官
  • 2026年冷拔/冷弯/冷轧/热轧/冷拉异型钢厂家推荐:苏州汇志金属制品有限公司全系供应 - 品牌推荐官
  • 四川办公家具怎么选?五大核心维度与西南区域Top5厂家推荐 - 深度智识库
  • 2026年 减温减压器厂家推荐榜单:蒸汽/一体式/分体式/气动/电动/锅炉/汽轮机减温减压设备,专业制造与高效稳定解决方案深度解析 - 品牌企业推荐师(官方)