# 238 Product of Array Except Self

## Problem Statement

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.

Input: nums = [1,2,3,4]
Output: [24,12,8,6]

## Approach

The key to solve this problem is to find out, how the math works at each position. If we look at nums we see that we want the product of the numbers to the left and the product of the numbers to the right:
`[1,2,3,4]`
1 * (3*4)

To do that we can make use of a postfix and a prefix, which tracks the products, as well as an extra results array which will be updated through two loops:

## Solution

``````const productExceptSelf => (nums) = {
let prefix = 1;
let postfix = 1;
let result = [];
for (let i = 0; i < nums.length; i++) {
result[i] = prefix
prefix *= nums[i]
}

for (let i = nums.length - 1; i >= 0; i--){
result[i] *= postfix
postfix *= nums[i]
}

return result
};
``````

LC

DSA MOC