千家信息网

LeetCode如何构建乘积数组

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下LeetCode如何构建乘积数组,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!题目描述给定一个数组 A[
千家信息网最后更新 2026年11月02日LeetCode如何构建乘积数组

小编给大家分享一下LeetCode如何构建乘积数组,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

题目描述

给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。

  • 所有元素乘积之和不会溢出 32 位整数
  • a.length <= 100000

题目样例

示例

  • 输入: [1,2,3,4,5]
  • 输出: [120,60,40,30,24]

题目思考

  1. 如何做到 O(N)时间复杂度?

解决方案

思路
  • 一个比较容易想到的思路是暴力法, 对每个元素都计算其左右乘积, 这样时间复杂度达到了 O(N^2), 按照题目数据规模肯定会超时
  • 还有种方法是求所有元素的总乘积, 然后对于每个元素分别除以自身 (注意对 0 的处理), 这样虽然只用了 O(N)时间, 但不满足题目要求
  • 那如何做到 O(N)时间复杂度且不使用除法呢? 我们如果能够在计算某个元素时利用到之前的计算结果, 那么就不需要重复计算当前的左右所有乘积了
  • 比较容易想到的思路就是类似前缀和的预处理方案, 只是这里改成了 前缀积, 具体步骤如下:
    1. 从左到右遍历一遍数组, 记录当前前缀积并保存到数组中
    2. 然后再从右向左遍历, 记录当前后缀积, 然后与前一个前缀积相乘, 即为当前元素的左右所有元素乘积了
  • 下面的代码对必要步骤有详细的解释, 方便大家理解
复杂度
  • 时间复杂度 O(N): 只需要遍历数组两次
  • 空间复杂度 O(N): 需要维护一个前缀积数组
代码
class Solution:
def constructArr(self, a: List[int]) -> List[int]:
# 从左到右, 再从右向左遍历
# 维护前缀积数组, 从右向左遍历时只需要维护后缀积即可, 然后乘以前一个前缀积, 其结果即为当前元素的左右元素乘积
lefts = []
left = 1
for x in a:
left *= x
lefts.append(left)
# 这里只需要维护后缀积, 没必要再建立一个后缀积数组
right = 1
res = [0] * len(a)
for i in range(len(a))[::-1]:
# 注意下标为0时左侧没有元素, 此时左侧部分乘积置为1
left = lefts[i - 1] if i > 0 else 1
res[i] = left * right
# 注意当前元素处理完之后再乘以它, 因为结果是不包含当前元素自身的
right *= a[i]
return res

以上是"LeetCode如何构建乘积数组"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

元素 数组 乘积 前缀 复杂 复杂度 时间 题目 后缀 思路 篇文章 结果 必要 代码 内容 方案 步骤 除法 处理 下标 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中智农互联网科技 哈尔滨大商圈互联网科技有限公司 互联网与科技金融数据 互联网科技战争 合肥互联网科技公司 深圳卡尔迅互联网科技有限公司怎么样 互联网科技创新企业排名 互联网科技创新服务 互联网和黑科技的看法 中国航天科技大学国际工业互联网 深圳市优智互联网科技有限公司 互联网保险科技创业 互联网金融科技展 互联网数据科技专业 杭州披云加互联网科技有限公司 东营紫格互联网科技 互联网科技新闻 科技和互联网行业的特点 平安好医生打造互联网科技医疗 现代科技的标志之一的互联网 互联网科技产业 壕鑫互联网络科技 互联网科技生活的内容 海南购全球互联网科技 创业天下互联网科技有限公司 张召忠谈中国互联网科技 福建互联网展示科技馆设计 米泉互联网科技专业怎么样 众联互联网络科技 优雇互联网科技有限公司
0