238. Product of Array Except Self
Tags
- Array
- Prefix Sum
Link
Question
Given an integer array
nums
, return an arrayanswer
such thatanswer[i]
is equal to the product of all the elements ofnums
exceptnums[i]
.
The product of any prefix or suffix ofnums
is guaranteed to fit in a 32-bit integer.
You must write an algorithm that runs inO(n)
time and without using the division operation.
Example 1:
Input: nums = [1,2,3,4]
Output: [24,12,8,6]
Example 2:
Input: nums = [-1,1,0,-3,3]
Output: [0,0,9,0,0]
Constraints:
2 <= nums.length <= 10
5-30 <= nums[i] <= 30
- The product of any prefix or suffix of
nums
is guaranteed to fit in a 32-bit integer.
Follow-up: Can you solve the problem in O(1)
extra space complexity? (The output array does not count as extra space for space complexity analysis.)
Answer
JavaScript
/**
* @param {number[]} nums
* @return {number[]}
*/
var productExceptSelf = function (nums) {
const ans = new Array(nums.length).fill(1);
let prefixProduct = 1;
for (let i = 0; i < nums.length; i++) {
ans[i] = prefixProduct;
prefixProduct *= nums[i];
}
let suffixProduct = 1;
for (let i = nums.length - 1; i >= 0; i--) {
ans[i] *= suffixProduct;
suffixProduct *= nums[i];
}
return ans;
};
/**
* @param {number[]} nums
* @return {number[]}
*/
var productExceptSelf = function (nums) {
const n = nums.length;
const left = new Array(n).fill(1);
const right = new Array(n).fill(1);
for (let i = 1; i < n; i++) {
left[i] = left[i - 1] * nums[i - 1];
}
for (let i = n - 2; i >= 0; i--) {
right[i] = right[i + 1] * nums[i + 1];
}
const result = [];
for (let i = 0; i < n; i++) {
result[i] = left[i] * right[i];
}
return result;
};