package Array
func productExceptSelf(nums []int) []int {
prefixSum, suffixSum := make([]int, len(nums)), make([]int, len(nums))
prefixSum[0], suffixSum[len(nums)-1] = nums[0], nums[len(nums)-1]
for i := 1; i < len(nums); i++ {
prefixSum[i] = prefixSum[i-1] * nums[i]
}
for i := len(nums) - 2; i >= 0; i-- {
suffixSum[i] = suffixSum[i+1] * nums[i]
}
result := make([]int, len(nums))
for i := 1; i < len(nums)-1; i++ {
result[i] = prefixSum[i-1] * suffixSum[i+1]
}
result[0] = suffixSum[1]
result[len(nums)-1] = prefixSum[len(nums)-2]
return result
}