思路:暴力法,乘积 res[i] = sum / a[i]
但是题目说不能使用除法,故不能使用暴力法。
要求除了这个数的乘积,即这个数的左边×右边,左右各维护一个数组,结果就是左边×右边。
left[i]表示第i位之前的乘积,right[i]表示第i位之后的乘积
class Solution {
public static int[] constructArr(int[] a) {
if (a == null || a.length == 0) return a;
int len = a.length;
int[] left = new int[len];
int[] right = new int[len];
left[0] = right[len - 1] = 1;
for (int i = 1; i < len; i++) {
left[i] = left[i - 1] * a[i - 1];
}
for (int i = len - 2; i >= 0; i--) {
right[i] = right[i + 1] * a[i + 1];
}
int[] ans = new int[len];
// left [1,1,2,6,24]
// right [120,60,20,5,1]
for (int i = 0; i < len; i++) {
ans[i] = left[i] * right[i];
}
return ans;
}
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] arr = constructArr(a);
System.out.println(Arrays.toString(arr));
}
}