剑指 Offer 66. 构建乘积数组

和力扣238. 除自身以外数组的乘积相同

  1. //时间On,空间O1
  2. func productExceptSelf(nums []int) []int {
  3. if len(nums) <= 1 {
  4. return nums
  5. }
  6. n := len(nums)
  7. res := make([]int, n)
  8. left, right := make([]int, n), make([]int, n)
  9. left[0], right[n - 1] = 1, 1
  10. for i := 1; i < n; i++ { //左边到i的数的数组
  11. left[i] = left[i-1] * nums[i-1]
  12. }
  13. for i := n - 2; i >= 0; i-- { //右边到i的数的数组
  14. right[i] = right[i+1] * nums[i+1]
  15. }
  16. for i := 0; i < n; i++ { //左右相乘,即为目标数组的值
  17. res[i] = left[i] * right[i]
  18. }
  19. return res
  20. }