不用除法,一个简单的算法题
题目描述
有一个长度为len数组arr([1,2,3,4]),要求返回一个新数组newArr([24, 12, 8, 6])
对于新数组,存在newArr[i] = arr[1] * arr[2] *…*arr[i-1] * arr[i + 1] … arr[len-1]
算法要求:
- 时间复杂度O(n);
- 不可以使用除法;
答案
function convertArr(arr) {
const len = arr.length;
const aa = [], bb = [];
let a = 1, b = 1;
for (let i = 0; i < len; i++) {
aa.push(a = arr[i] * a);
bb.unshift(b = arr[len - i - 1] * b)
}
const result = [];
for (let i = 0; i < len; i++) {
result.push((aa[i - 1] ?? 1) * (bb[i + 1] ?? 1))
}
return result;
}