singularity

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        n = len(nums)
        answer = [1] * n

        # prefix pass
        prefix = 1
        for i in range(n):
            answer[i] = prefix
            prefix = prefix*nums[i]

        # suffix pass
        suffix = 1
        for i in range(n - 1, -1, -1):
            answer[i] *= suffix
            suffix *= nums[i]

        return answer