构建乘积数组
解题思路:
-
当前元素为 1,乘以 1 不影响最终结果;
-
第一次循环得到当前下标前面的所有元素的乘积;
-
第二次循环反向遍历得到的是当前下标后面的所有元素的乘积;
图解:
复杂度:
-
时间复杂度:O(N),其中 N 为数组长度,两轮遍历数组 a,使用 O(N);
-
空间复杂度:O(1),使用常数大小额外空间;
代码实现:
function constructArr(arr: number[]): number[] {
let res = [];
let tmp = 1;
for (let index = 0; index < arr.length; index++) {
res[index] = tmp;
tmp *= arr[index];
}
tmp = 1;
for (let index = arr.length - 1; index >= 0; index--) {
res[index] *= tmp;
tmp *= arr[index];
}
return res;
};
剑指 Offer 62.圆圈中最后剩下的数字
上一篇