Description
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).
Follow up:
Could you solve it with constant space complexity? (The output array does not count as extra space for the purpose of space complexity analysis.)
Solution
开始的思路是使用log
将乘法转换为加法,除法转换为减法,但问题在于当数组中有0
的时候,log(0) = -Infinity
。
从左到右遍历,计算每个数组元素的前缀的乘积(不包括该数组元素),将计算结果保存在output
数组中,
然后从右到左遍历,计算每个数组元素的后缀的乘积(不包括该数组元素),将后缀的乘积结果乘以之前保存的前缀乘积,得到最终结果。
Time complexity: O(N)
Space complexity: O(1)
class Solution {
public int[] productExceptSelf(int[] nums) {
int len = nums.length;
int[] output = new int[len];
int prefix = 1, suffix = 1;
for (int i = 0; i < nums.length; i++) {
output[i] = prefix;
prefix *= nums[i];
}
for (int j = len-1; j >= 0; j--) {
output[j] *= suffix;
suffix *= nums[j];
}
return output;
}
}