给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。
leetcode上面提供了一种非常精妙的算法,空间复杂度为n
int* constructArr(int* a, int aSize, int* returnSize){
int *arr = NULL;
int i, temp;
if (a == NULL || aSize <= 1) {
*returnSize = 0;
return a;
}
*returnSize = aSize;
arr = (int *)malloc(sizeof(int) * aSize); //开辟一个数组大小为n
arr[0] = 1; //定义数组第一位是1
for (i = 1; i < aSize; i++) {
arr[i] = arr[i - 1] * a[i - 1];
} //将数组从0到n-1位先赋值一遍,且第asize-1内的值就是最终结果
temp = 1;
for (i = aSize - 2; i >= 0; i--) {
temp *= a[i + 1];
arr[i] *= temp;
} //从n-2开始,也就是从右边倒数第二个开始,修改每个数组空间的值是最终结果
return arr;
} //非常妙的解决思路