这道题没思路,看了答案。
思路如下,以缺少的数组元素作为分界线,将数组分为两个小数组,其中,左方的数组,每经过一次乘积求值,他都会多乘一个元素,右方则相反,因此只需要创建两个数组,从顶向下,从底向上,求出值来,再将他们相乘即可。
public int[] constructArr(int[] a) {
int[] l = new int[a.length];
int[] r = new int[a.length];
if(a.length == 0){
return l;
}
l[0] = 1;
r[a.length-1] = 1;
for(int count = 1;count<a.length;count++){
l[count]=l[count-1]*a[count-1];
}
for(int count = a.length - 2;count>=0;count--){
r[count]=r[count+1]*a[count+1];
}
int[] res = new int[a.length];
for(int count = 0;count<a.length;count++){
res[count]= l[count]*r[count];
}
return res;
}
|