1、题目描述
给定一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。
不可使用除法,且在 O(n) 时间复杂度内完成。
2、解题思路
1、两次遍历, 一次正向,一次反向
1.1、正向遍历生成未完善的数组,数组的第 i 项代表前 i 个元素(不包括i)的乘积
2、反向遍历,维护一个临时变量 temp 设置初始值为1,用来记录第 i 项之后所有元素的乘积(不包括i)
2.1、用临时变量乘未完善的数组,结果即为不包含第 i 项的所有元素的乘积
3、返回完善后的数组,即为所求对应的原数组中除自身元素以外元素的乘积新数组
3、解题代码
/**
* @param {number[]} nums
* @return {number[]}
*/
var productExceptSelf = function(nums) {
const res = [];
for (let i = 0, temp = 1; i < nums.length; i++) {
res[i] = temp;
temp *= nums[i];
}
for (let i = nums.length - 1, temp = 1; i >= 0; i--) {
res[i] *= temp;
temp *= nums[i];
}
return res;
};