NOTE

除自身以外数组的乘积

通过左右乘积数组计算除自身以外数组元素的乘积。

Data Structures & Algorithms创建于 更新于 约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 题目描述

给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

2. 思路

  1. 思路一
    • 分别计算左右乘积数组
    • 左:L[3] = a[0] * a[1] * a[2],即除去当前数a[3]
    • 右:R[5] = a[6] * a[7] * a[8],即除去当前数a[5]
    • 结果即为L[x]*R[x]

3. 实现

3.1. 双指针(夹逼法)

func productExceptSelf(nums []int) []int {
    left := make([]int, len(nums))
    left[0] = 1
    for i := 1; i < len(nums); i++{
        left[i] = left[i-1] * nums[i-1]
    }

    right := make([]int, len(nums))
    right[len(nums)-1] = 1
    for i := len(nums)-1; i > 0; i--{
        right[i-1] = right[i] * nums[i]
    }

    res := make([]int, len(nums))
    for i := 0; i < len(nums); i++ {
        res[i] = left[i]*right[i]
    }
    return res
}

4. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看