【LeetCode】【学习笔记】238. 除自身以外数组的乘积

238. 除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

请**不要使用除法,**且在 O(*n*) 时间复杂度内完成此题。

示例 1:

输入: nums = [1,2,3,4]
输出: [24,12,8,6]

示例 2:

输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]

提示:

  • 2 <= nums.length <= 105
  • -30 <= nums[i] <= 30
  • 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内

解决思路

动态规划

  1. 先在结果数组answer中存储左边部分乘积
  2. 再在结果数组answer中存储右边部分乘积

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

下标(index) 0 1 2 3
原数组 1 2 3 4
左部分的乘积 1 1 1 * 2 1 * 2 * 3
右部分的乘积 2 * 3 * 4 3 * 4 4 1
结果(左右部分相乘) 1 * 2 * 3 * 4 1 * 3 * 4 1 * 2 * 4 1 * 2 * 3 * 1

代码实现

var productExceptSelf = function(nums) {
    
    
  let answer=[];
  let leftPart=1,rightPart=1;
  for(let index=0;index<nums.length;index++){
    
    
    answer[index]=leftPart;
    leftPart*=nums[index];
  }
  for(let index=nums.length-1;index>0;index--){
    
    
    rightPart*=nums[index];
    answer[index-1]*=rightPart;
  }
  return answer;
};

猜你喜欢

转载自blog.csdn.net/weixin_45944495/article/details/128323779