Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from typing import List

class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
"""
Calculate product of all elements except self without division.

Strategy: Two-pass with prefix and suffix products
- First pass: Build prefix products (product of all elements to the left)
- Second pass: Build suffix products (product of all elements to the right)
- Result[i] = prefix[i] * suffix[i]

Optimization: Use output array to store prefix, then multiply by suffix in-place

Time: O(n), Space: O(1) excluding output array
"""

n = len(nums)
answer = [1] * n

# First pass: Calculate prefix products
# answer[i] contains product of all elements to the left of i
prefix = 1
for i in range(n):
answer[i] = prefix
prefix *= nums[i]

# Second pass: Calculate suffix products and multiply with prefix
# For each position, multiply existing prefix with product of all elements to the right
suffix = 1
for i in range(n - 1, -1, -1):
answer[i] *= suffix
suffix *= nums[i]

return answer
Loading