除自身以外数组的乘积
js
/**
- 左边部分left[i]等于nums[0]~nums[i - 1]所有元素的乘积;
- 右边部分right[i]等于nums[i + 1]~nums[n - 1]所有元素的乘积。
那么,对于每个元素num[i],其output[i]就等于left[i]和right[i]的乘积。
具体实现过程如下:
先定义两个数组left和right,长度都为n(即nums数组的长度)。
接下来从左到右遍历nums数组,每次将left[i]设为left[i - 1] * nums[i],即当前数字与前面连续数字的乘积。
类似地,从右到左遍历nums数组,每次将right[i]设为right[i + 1] * nums[i],即当前数字与后面连续数字的乘积。
最后,对于每个元素num[i],计算其output[i]等于left[i]和right[i]的乘积。
【left数组第一个元素等于1】
【right数组最后一个元素等于1】
*/
function productExceptSelf(nums = []) {
let n = nums.length
let left = new Array(n)
let right = new Array(n)
left[0] = 1
for (let i = 1; i < n; i++) {
// 计算左边数组,不包括最后一个
left[i] = left[i - 1] * nums[i - 1]
}
console.log(left)
right[n - 1] = 1
for (let i = n - 2; i >= 0; i--) {
right[i] = right[i + 1] * nums[i + 1]
}
console.log(right)
let output = new Array(n)
for (let i = 0; i < n; i++) {
output[i] = left[i] * right[i]
}
return output
}
console.log(hIndex([1, 2, 3, 4 ]))