Skip to main content

除自身以外数组的乘积

题目

给你一个整数数组 nums, 返回 数组 answer, 其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积.

题目数据** 保证**数组 nums 之中任意元素的全部前缀元素和后缀的乘积都在 32 位整数范围内.

不要使用除法, 且在 O(n) 时间复杂度内完成此题.

进阶: 你可以在 O(1) 的额外空间复杂度内完成这个题目吗? (出于对空间复杂度分析的目的, 输出数组不被视为额外空间.)

提示:
  • 2 <= nums.length <= 10⁵
  • -30 <= nums[i] <= 30
  • 保证数组 nums 之中任意元素的全部前缀元素和后缀的乘积都在 32 位整数范围内
示例
输入: nums = [1,2,3,4]
输出: [24,12,8,6]
输入: nums = [1,2,3,4]
输出: [24,12,8,6]

题解

类似于前缀和, 这里是前缀积.

/**
* @param {number[]} nums
* @return {number[]}
*/
var productExceptSelf = function (nums) {
const n = nums.length
const pre = new Array(n).fill(1)
const suf = new Array(n).fill(1)

for (let i = 1; i < n; i++) {
pre[i] = pre[i - 1] * nums[i - 1]
}

for (let i = n - 2; i >= 0; i--) {
suf[i] = suf[i + 1] * nums[i + 1]
}

const result = new Array(n)
for (let i = 0; i < n; i++) {
result[i] = pre[i] * suf[i]
}
return result
}