剑指offer_【51】构建乘积数组

1.题目描述

给定一个数组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]。不能使用除法

2.解题思路

题目的意思就是B[i] = A[0]*A[1]….*A[n-2]*A[n-1] / A[i],但是题目要求不能用除法

创建一个left数组和一个rigth数组,拿n = 3为例

res[i] left[0]*right[0] left[1]*right[1] left[2]*right[2] left[3]*right[3]
right数组 A[2]*A[1]*A[0]*1 A[1]*A[0]*1 A[0]*1 1
left数组 1 1*A[0] 1*A[0]*A[1] 1*A[0]*A[1]*A[2]

3.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.ArrayList;
public class Solution {
public int[] multiply(int[] A) {
int []res = new int[A.length];
int []left = new int[A.length];
int []right = new int[A.length];

left[0] = 1;
for(int i = 1;i<A.length;i++){
left[i] = A[i-1]*left[i-1];
}

right[A.length-1] = 1;
for(int i = A.length-2;i>=0;i--){
right[i] = right[i+1]*A[i+1];
}
//计算结果
for(int i = 0;i<A.length;i++){
res[i] = left[i]*right[i];
}
return res;
}
}
文章目录
  1. 1. 1.题目描述
  2. 2. 2.解题思路
  3. 3. 3.代码
| 139.6k