| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | 
							- func productExceptSelfLong(nums []int) []int {
 
- 	l := len(nums)
 
- 	ans := make([]int, l)
 
- 	zero := false
 
- 	zeroIdx, product := -1, 1
 
- 	for i := 0; i < l; i++ {
 
- 		if nums[i] != 0 {
 
- 			product *= nums[i]
 
- 		} else {
 
- 			if zero {
 
- 				return ans
 
- 			}
 
- 			zero = true
 
- 			zeroIdx = i
 
- 		}
 
- 	}
 
- 	if zero {
 
- 		ans[zeroIdx] = product
 
- 		return ans
 
- 	}
 
- 	for i := 0; i < l; i++ {
 
- 		ans[i] = product / nums[i]
 
- 	}
 
- 	return ans
 
- }
 
- func productExceptSelf(nums []int) []int {
 
- 	l := len(nums)
 
- 	ans := make([]int, l)
 
- 	memset(ans, 1)
 
- 	for i := 1; i < l; i++ {
 
- 		ans[i] = ans[i-1] * nums[i-1]
 
- 	}
 
- 	for i, tmp := l-2, 1; 0 <= i; i-- {
 
- 		tmp *= nums[i+1]
 
- 		ans[i] *= tmp
 
- 	}
 
- 	return ans
 
- }
 
- func memset(a []int, v int) {
 
- 	a[0] = v
 
- 	l := len(a)
 
- 	for bp := 1; bp < l; bp *= 2 {
 
- 		copy(a[bp:], a[:bp])
 
- 	}
 
- }
 
 
  |