Product of Array Except Self

Problem Statement

Return an array output such that output[i] is the product of all elements of nums except nums[i].

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

Approach 1: Brute Force

Explanation: Multiply all elements except current for each index.

Time Complexity: O(n²)

Space Complexity: O(1) or O(n) for output

for i in 0..n-1:
    prod=1
    for j in 0..n-1:
        if i != j:
            prod *= nums[j]
    output[i]=prod    

Approach 2: Prefix & Suffix Arrays

Explanation: Compute prefix and suffix products separately.

Time Complexity: O(n)

Space Complexity: O(n)

prefix[0]=1
for i in 1..n-1:
    prefix[i]=prefix[i-1]*nums[i-1]
suffix[n-1]=1
for i in n-2..0:
    suffix[i]=suffix[i+1]*nums[i+1]
for i in 0..n-1:
    output[i]=prefix[i]*suffix[i]    

Approach 3: Optimal (No extra arrays)

Explanation: Use output array as prefix, then multiply suffix on the go.

Time Complexity: O(n)

Space Complexity: O(1) ignoring output array

output[0]=1
for i in 1..n-1:
    output[i]=output[i-1]*nums[i-1]
suffix=1
for i in n-1..0:
    output[i] *= suffix
    suffix *= nums[i]