面试题66. 构建乘积数组
分析:
1、当数组长度为0时直接输出该数组
2、创建三个数组:第一个数组存原数组从左至右在某个位置前面所有数的积、第二个数组存从右至左原数组某个位置后面所有数的积、第三个数组存最终的数组
代码
class Solution {
public int[] constructArr(int[] a) {
if(a.length==0){
return a;
}
int[] newArr=new int[a.length];
int[] liftArr=new int[a.length];//由左向右乘
int[] rightArr=new int[a.length];//由右向左乘
liftArr[0]=1;
rightArr[a.length-1]=1;
for(int i=1;i<a.length;i++){
liftArr[i]=liftArr[i-1]*a[i-1];
}
for(int j=a.length-2;j>=0;j--){
rightArr[j]=rightArr[j+1]*a[j+1];
}
for(int k=0;k<a.length;k++){
newArr[k]=liftArr[k]*rightArr[k];
}
return newArr;
}
}
运行结果
输入: [1,2,3,4,5]
输出: [120,60,40,30,24]