剑指Offer66.构建乘积数组(前缀积和后缀积)

原题链接

思路:题目不让用除法,类似于前缀和,我们很容易想到前缀积和后缀积,也就是说对于每一位数字,我们计算一个前缀积数组用来存放某个数字之前的数字之积,再用一个后缀数组保存这个数组中这个数后面数的乘积,之后前缀积和后缀积相乘即得解

 1 public static int[] constructArr(int[] a) {
 2         int len = a.length;
 3         int[] left = new int[len];
 4         int[] right = new int[len];
 5         left[0] = right[len - 1] = 1;
 6         for(int i = 1; i < len; i ++) {
 7             left[i] = left[i - 1] * a[i - 1];
 8             right[len - i - 1] = right[len - i] * a[len - i];
 9         }
10         int[] ans = new int[len];
11         for(int i = 0; i < len; i ++) {
12             ans[i] = left[i] * right[i];
13         }
14         return ans;
15     }
View Code
原文地址:https://www.cnblogs.com/bianjunting/p/14269611.html