238. 除自身以外数组的乘积https://leetcode.cn/problems/product-of-array-except-self/
给你一个整数数组
nums
,返回 数组answer
,其中answer[i]
等于nums
中除nums[i]
之外其余各元素的乘积 。题目数据 保证 数组
nums
之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请不要使用除法,且在
O(n)
时间复杂度内完成此题。示例 1:
输入: nums =[1,2,3,4] 输出:[24,12,8,6]
算法思路
将nums[i]左右两侧的元素乘积全部记录在一个新的数组中;
class Solution {
public int[] productExceptSelf(int[] nums) {
//nums = [1,2,3,4]
int[] left = new int[nums.length];
int[] right = new int[nums.length];
left[0]=1;
right[nums.length-1]=1;
//left 1,1*1,1*1*2,1*1*2*3
for(int i=1;i<nums.length;i++){
left[i]=left[i-1]*nums[i-1];
}
//right 2*3*4*1,3*4*1,4*1,1
for(int i=nums.length-2;i>=0;i--){
right[i]=right[i+1]*nums[i+1];
}
for(int i=0;i<nums.length;i++){
nums[i]=left[i]*right[i];
}
return nums;
}
}