u
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
package top100liked
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// https://leetcode.cn/problems/product-of-array-except-self/?envType=study-plan-v2&envId=top-100-liked
|
||||
|
||||
// func productExceptSelf(nums []int) []int {
|
||||
// left := make([]int, len(nums))
|
||||
// right := make([]int, len(nums))
|
||||
// left[0] = nums[0]
|
||||
// right[len(nums)-1] = nums[len(nums)-1]
|
||||
// for i := 1; i < len(nums); i++ {
|
||||
// left[i] = left[i-1] * nums[i]
|
||||
// }
|
||||
// for i := len(nums) - 2; i >= 0; i-- {
|
||||
// right[i] = right[i+1] * nums[i]
|
||||
// }
|
||||
// res := []int{}
|
||||
// for i := range nums {
|
||||
// if i == 0 {
|
||||
// res = append(res, right[1])
|
||||
// } else if i == len(nums)-1 {
|
||||
// res = append(res, left[len(nums)-2])
|
||||
// } else {
|
||||
// res = append(res, left[i-1]*right[i+1])
|
||||
// }
|
||||
// }
|
||||
// return res
|
||||
// }
|
||||
|
||||
func productExceptSelf(nums []int) []int {
|
||||
n := len(nums)
|
||||
answer := make([]int, n)
|
||||
|
||||
// 第一遍:计算左边乘积,存入 answer
|
||||
answer[0] = 1
|
||||
for i := 1; i < n; i++ {
|
||||
answer[i] = answer[i-1] * nums[i-1]
|
||||
}
|
||||
|
||||
// 第二遍:从右向左,用 R 维护右边乘积
|
||||
R := 1
|
||||
for i := n - 1; i >= 0; i-- {
|
||||
answer[i] = answer[i] * R // 左边积 × 右边积
|
||||
R = R * nums[i] // 更新右边积
|
||||
}
|
||||
|
||||
return answer
|
||||
}
|
||||
|
||||
func TestS16(t *testing.T) {
|
||||
fmt.Printf("%+v", productExceptSelf([]int{1, 2, 3, 4}))
|
||||
fmt.Printf("%+v", productExceptSelf([]int{-1, 1, 0, -3, 3}))
|
||||
}
|
||||
Reference in New Issue
Block a user