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])
- }
- }
|