题目链接
题目(中等)
给定一个数组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:
输入:arrayA = [2, 4, 6, 8, 10]
输出:[1920, 960, 640, 480, 384]
提示:
- 所有元素乘积之和不会溢出 32 位整数
- arrayA.length <= 100000
题解
- 时间复杂度 O(N): 其中 N 为数组长度,两轮遍历数组 A ,使用 O(N) 时间。
- 空间复杂度 O(1): 变量 tmp 使用常数大小额外空间(数组 B 作为返回值,不计入复杂度考虑)
/**
* @param {number[]} arrayA
* @return {number[]}
*/
var statisticalResult = function(arrayA) {
let len = arrayA.length;
if (!len) {
return [];
}
let arrayB = new Array(len);
arrayB[0] = 1;
let tmp = 1;
for(let i = 1; i < len; i++) {
arrayB[i] = arrayB[i - 1] * arrayA[i - 1];
}
for(let i = len - 2; i >= 0; i--) {
tmp *= arrayA[i + 1];
arrayB[i] *= tmp;
}
return arrayB;
};