数据结构(七十九)
学习数据结构与算法过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。
—— 构建乘积数组 ——
1.题目描述
给定一个数组 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]。不能使用除法。
示例:
输入:
[1,2,3,4,5]
输出:
[120,60,40,30,24]
2.代码
c
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* constructArr(int* a, int aSize, int* returnSize){
if (a == NULL || aSize < 2) {
*returnSize = 0;
return a;
}
int *ans = (int *)malloc(sizeof(int) * aSize);
if (!ans) {
*returnSize = 0;
return ans;
}
memset(ans,0,aSize * sizeof(int));
*returnSize = aSize;
ans[0] = 1;
for (int i = 1;i < aSize;i++)
ans[i] = ans[i - 1] * a[i - 1];
int right = 1;
for (int i = aSize - 2;i >= 0;i--) {
right *= a[i + 1];
ans[i] *= right;
}
return ans;
}
不能用除法是这题最大的难度。