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
š” Think: What if I multiply all elements except the current one for every index?
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]
š” Think: Can I use stored left and right products to combine efficiently?
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]
š” Think: What if I fill prefix first, then merge suffix values in one pass?