class Solution {
// O(n)解法,时间复杂度为O(n)
public int[] constructArr(int[] a) {
if(a==null||a.length==0){
return new int[]{};
}
int n=a.length;
int[] res=new int[n];
int[] left=new int[n];
int[] right=new int[n];
left[0]=1;
right[n-1]=1;
for (int i = 1; i < right.length; i++) {
left[i]=left[i-1]*a[i-1];
}
for (int j = n-2; j >=0; j--) {
right[j]=right[j+1]*a[j+1];
}
for (int i = 0; i < right.length; i++) {
res[i]=left[i]*right[i];
}
return res;
}
}
// 空间复杂度降为O(1)
// class Solution {
// public int[] constructArr(int[] a) {
// if(a.length == 0) return new int[0];
// int[] b = new int[a.length];
// b[0] = 1;
// int tmp = 1;
// for(int i = 1; i < a.length; i++) {
// b[i] = b[i - 1] * a[i - 1];
// }
// for(int i = a.length - 2; i >= 0; i--) {
// tmp *= a[i + 1];
// b[i] *= tmp;
// }
// return b;
// }
// }
// 暴力解法会超时
// class Solution {
// public int[] constructArr(int[] a) {
// int n=a.length;
// if(n==0){
// return new int[]{};
// }
// int[] res=new int[n];
// for (int i = 0; i < res.length; i++) {
// res[i]=1;
// }
// for (int i = 0; i < res.length; i++) {
// for (int j = 0; j < res.length; j++) {
// if(j==i){
// continue;
// }
// res[i]=res[i]*a[j];
// }
// }
// return res;
// }
// }