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.)
Subscribe to see which companies asked this question
/**
* 求一个数组中元素相乘的积,不包括其自身。
* 题目要求不让用除法,即使可以用乘法,也不能简单的求出所有元素的积再去除当前元素的值(因为有的元素的值,有可能为0)
* 分别right[i]和left[i]表示原数组中nums[i]的右边元素相乘和左边元素相乘的积
*/
public int[] productExceptSelf(int[] nums) {
int len = nums.length;
int result[] = new int[len];
int right[] = new int[len];
right[len-1] = 1;
for(int i=len-2;i>=0;i-- ){
right[i] = right[i+1]*nums[i+1];
}
int left = 1;/*为节省空间,只取一个left的值来保存当前要求的nums[i]左边元素的乘积*/
for(int i =0;i<len;i++){
result[i] = left*right[i];
left = left*nums[i];/*求下一个元素对应的结果之前,先把left的值更新为left*nums[i]*/
}
return result;
}