最容易想到的就是暴力法,依次求出每个B[i],但是这样的时间复杂度为O(n^2),效率太低了。
既然暴力法效率太低,那就看看能不能找出B[i]之间的关系来提高效率。

由上图可以发现

B[i]的左半部分(红色部分)和B[i-1]有关,将红色部分乘积和看成C[i],则有C[i] = C[i-1]*A[i-1]
B[i]的右半部分(紫色部分)和B[i+1]有关,可以使用一个temp代表B[i]的右半部分,每次temp*A[i+1]
 
因此我们可以先从0遍历到n-1,计算出B[i]的左半部分。然后将左半部分与代表其有半部分的temp相乘,即可得到B[i]。
数组间的关系通过画图更容易找出关系
import java.util.ArrayList; public class Solution {     public int[] multiply(int[] A) {         if(A == null)return null;         int length = A.length;         if(length == 0 || length == 1)return new int[0];         int[] B = new int[length];         B[0] = 1;         for(int i = 1;i < length;i++){             B[i] = B[i - 1] * A[i - 1];         }         int temp = 1;         for(int i = length - 2;i >= 0;i--){             temp *= A[i + 1];             B[i] *= temp;         }         return B;     } }