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]
.
这道题还看了挺久,发现根本没那么复杂。虽然没有找到最优解,但是相处了一个比较容易的解法。构建两个数组, 分别存储从左从右累计的乘积,(不包括自己)。例如上面的例子: left = [1, 1, 2, 6] right = [ 24 ,12, 4,1]。然后在相同下表处乘积合并就好了。
代码:
public int[] productExceptSelf(int[] nums) {
if(nums == null || nums.length == 0) return new int[0];
int len = nums.length;
int [] left = new int[len];
int [] right = new int[len];
left[0] = 1;
for(int i=1;i<len;i++){
left[i] = left[i-1] * nums[i-1];
}
right[len-1] = 1;
for(int i=len-2;i>=0;i--){
right[i] = right[i+1]*nums[i+1];
}
int[] result = new int[len];
for(int i=0;i<len;i++){
right[i] = left[i] * right[i];
}
return right;
}