Prefix pass, then suffix pass
out[i] is (product of everything left of i) × (product of everything right of i). Two linear sweeps, no division.
A left-to-right pass writes prefix products. A right-to-left pass multiplies in the suffix products.
Algorithm
- Seed
outwith prefix products (out[0] = 1). - Walk right-to-left with a running suffix product and multiply into
out.
- Time
- O(n)
- Space
- O(1)
Output array does not count.
class Solution: def productExceptSelf(self, nums: list[int]) -> list[int]: n = len(nums) out = [1] * n pref = 1 for i in range(n): out[i] = pref pref *= nums[i] suff = 1 for i in range(n - 1, -1, -1): out[i] *= suff suff *= nums[i] return out