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.)
思考:这个题目要求时间复杂度为O ( n ) ,且最好不适用额外的空间。
对于每个元素,我们计算一下它左边元素的乘积,与右边元素的乘积,将两者相乘,这是数组中除了这个元素以外的乘积了。
比如数组,[1, 2, 3, 4],我们先计算每个元素左边的乘积。
1 2 3 4
1 1*2 1*2*3
右边元素的乘积
1 2 3 4
4*3*2 4*3 4
我们可以将为空的填上1,最终将对应位上相乘,即得到了要求的乘积。
运行时间:
代码:
public class ProductofArrayExceptSelf {
public int[] productExceptSelf(int[] nums) {
int[] res = new int[nums.length];
res[0] = 1;
// calculate the left side multi
for (int i = 1; i < nums.length; i++) {
res[i] = res[i - 1] * nums[i - 1];
}
// calculate the right side multi
int right = 1;
for (int i = nums.length - 1; i >= 0; i--) {
res[i] *= right;
right *= nums[i];
}
return res;
}
}