在 O(n) 时间复杂度内解决“除自身以外数组的乘积”问题
摘要
本文将探讨解决“除自身以外数组的乘积”问题的方法,该问题要求我们找到一个数组,其中的每个元素是原数组中除该元素外其他所有元素的乘积。我们将分析一种高效算法,并提供 Python、Java 和 C++ 的实现。
1. 问题描述
给定一个整数数组 nums
,返回一个数组 answer
,其中 answer[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积。
2. 输入和输出格式
- 输入:整数数组
nums
。 - 输出:整数数组,其中的每个元素是输入数组中除该元素外其他所有元素的乘积。
3. 示例
- 示例 1:
nums = [1,2,3,4]
输出:[24,12,8,6]
- 示例 2:
nums = [-1,1,0,-3,3]
输出:[0,0,9,0,0]
4. 约束条件
2 <= nums.length <= 10^5
-30 <= nums[i] <= 30
- 任意元素的全部前缀元素和后缀的乘积都在 32 位整数范围内。
5. 算法分析
- 前缀和 + 后缀和:首先计算每个元素的前缀乘积,然后计算后缀乘积。最后,将前缀乘积和后缀乘积相乘(排除中间的元素)。
6. 多语言实现
我们将使用 Python、Java 和 C++ 来实现前缀和 + 后缀和算法。
Python 实现
def productExceptSelf(nums):
length = len(nums)
answer = [1] * length
prefix = 1
for i in range(length):
answer[i] *= prefix
prefix *= nums[i]
suffix =