238. Product of Array Except Self (Medium) (https://leetcode.com/problems/product-of-array-except-self/)
Given an integer array nums, return an array answer such that answer[i] is equal to the product of all the elements of nums except nums[i]. The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer. You must write an algorithm that runs in O(n) time and without using the division operation. Constraints: - 2 <= nums.length <= 10^5 - -30 <= nums[i] <= 30 - The input is generated such that answer[i] 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.)
function productExceptSelf(nums: number[]): number[] {
let leftProduct = 1,
rightProduct = 1;
const answer: number[] = [];
for (let i = 0; i < nums.length; i++) {
answer.push(leftProduct);
leftProduct *= nums[i];
}
for (let i = nums.length - 1; i > -1; i--) {
answer[i] *= rightProduct;
rightProduct *= nums[i];
}
return answer;
}
// Local check:
console.log(productExceptSelf([1, 2, 3, 4])); // [24, 12, 8, 6]
console.log(productExceptSelf([-1, 1, 0, -3, 3])); // [0, 0, 9, 0, 0]Example 1:
Input: nums = [1,2,3,4]
Output: [24,12,8,6]
Explanation:
- answer[0] = 2 * 3 * 4 = 24
- answer[1] = 1 * 3 * 4 = 12
- answer[2] = 1 * 2 * 4 = 8
- answer[3] = 1 * 2 * 3 = 6
Example 2:
Input: nums = [-1,1,0,-3,3]
Output: [0,0,9,0,0]
Explanation:
- answer[0] = 1 * 0 * -3 * 3 = 0
- answer[1] = -1 * 0 * -3 * 3 = 0
- answer[2] = -1 * 1 * -3 * 3 = 9
- answer[3] = -1 * 1 * 0 * 3 = 0
- answer[4] = -1 * 1 * 0 * -3 = 0