Skip to content

除自身以外数组的乘积

LeetCode-238

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 ]))