# 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[1] 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
};
```