【剑指offer】051-构建乘积数组

题目

给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]A[i-1]*A[i+1]…*A[n-1]。不能使用除法。

方法

参考:https://www.cnblogs.com/yongh/p/9971936.html
时间复杂度:2n

思路

画出矩阵,分析数组B每个元素的乘积元素组成,如下图所示

所以,我们可以使用一个循环,迭代计算A0到An-2的乘积,每乘一个数,就对应乘到B数组相应的位置,计算上图的左下部分
再使用一个循环,迭代计算An-1到A1的乘积,一样每乘一个数,要对应乘到B数组相应的位置,计算上图的右上部分

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function multiply(array{
  // write code here
  let mul = new Array(array.length).fill(1)
  let res = 1
  for (let i = 0; i < array.length - 1; i++) {
    res *= array[i]
    mul[i + 1] *= res
  }
  res = 1
  for (let i = array.length - 1; i > 0; i--) {
    res *= array[i]
    mul[i - 1] *= res
  }
  return mul
}
文章作者: ptp
文章链接: https://youyingjie114.github.io/2019/11/07/jz-offer/jz-offer-051/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 PTP'S BLOG