leetcode.cn/problems/pr…

解法一:前后缀分解,左右乘积数组
func productExceptSelf(nums []int) []int {
leftProductList := make([]int, len(nums))
leftProductList[0] = 1
for i := 1; i<len(nums); i++{
leftProductList[i] = leftProductList[i-1] * nums[i-1]
}
rightProductList := make([]int, len(nums))
rightProductList[len(nums)-1] = 1
for i := len(nums)-2; i>=0; i--{
rightProductList[i] = rightProductList[i+1] * nums[i+1]
}
res := make([]int, len(nums))
for i := 0; i<len(nums); i++{
res[i] = leftProductList[i]*rightProductList[i]
}
return res
}
可以进一步优化空间复杂度
func productExceptSelf(nums []int) []int {
n := len(nums)
rightProductList := make([]int, n)
rightProductList[n-1] = 1
for i := n-2; i >= 0; i--{
rightProductList[i] = rightProductList[i+1]*nums[i+1]
}
leftProduct := 1
for i:=0; i<n; i++{
rightProductList[i] = rightProductList[i]*leftProduct
leftProduct = leftProduct * nums[i]
}
return rightProductList
}
- 时间复杂度:O(n)
- 空间复杂度:O(1),输出数组不视为额外空间