Given an array of n integers where n > 1, nums
, return an array output
such that output[i]
is equal to the product of all the elements of nums
except nums[i]
.
Solve it without division and in O(n).
For example, given [1,2,3,4]
, return [24,12,8,6]
.
Follow up:
Could you solve it with constant space complexity? (Note: The output array does not count as extra space for the purpose of space complexity analysis.)
题目大意:给定一个数组,依次输出该数组除该数之外的各个数相乘之积
nums[i]=...nums[i-1]*nums[i+1]...
思路:
举个例子[1,2,3,4] return [24,12,8,6];
开辟一个与给定数组大小的返回数组res[],
先求出对应nums[i]的右边乘积,再用变量left保存nums[i]左边乘积,最后相乘得到res[i];
.....
res[2]=res[3]*nums[3];
res[1]=res[2]*nums[2];
....
AC代码:
public int[] productExceptSelf(int[] nums) {
int [] res=new int [nums.length];
res[nums.length-1]=1;
for(int i=nums.length-2;i>=0;i--){ //res[i]先保存nums[i]右边数的乘积
res[i]=res[i+1]*nums[i+1];
}
int left=1;
for(int i=0;i<nums.length;i++){ // 求出res[i]
res[i]*=left;
left*=nums[i]; //left保存nums[i]左边数的乘积
}
return res;
}