Given an array nums of n integers where n > 1, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].
Example:
Input: [1,2,3,4]
Output: [24,12,8,6]
Constraint: It’s guaranteed that the product of the elements of any prefix or suffix of the array (including the whole array) fits in a 32 bit integer.
Note: Please solve it without division and in O(n).
给出一个数组,输出同样大小的数组,每个元素对应的index处是整个数组除了该位置元素之外的乘积
限制条件:不能用除法,O(n)复杂度
思路:
如果可以用除法,那么只需要求所有元素的乘积,再除以每个元素就可以,但是不能用。而且复杂度是O(n), 所以不能用brute force。
可以用每个元素左边所有元素的乘积 乘以 该元素右边所有元素的乘积。
相当于遍历两次,第一次保存每个元素左边所有元素的乘积,
第二次保存每个元素右边所有元素的乘积,最后再把两者相乘
保存时可以用输出结果的result数组。
//1ms
public int[] productExceptSelf(int[] nums) {
if (nums == null || nums.length == 0) {
return (new int[]{});
}
int[] result = new int[nums.length];
int prod = 1;
//保存每个元素左边所有元素的乘积
for(int i = 0; i < nums.length; i++) {
result[i] = prod;
prod *= nums[i];
}
prod = 1;
//保存每个元素右边所有元素的乘积
for(int i = nums.length - 1; i >= 0; i--) {
result[i] *= prod;
prod *= nums[i];
}
return result;
}