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]
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.)
题意:给定一个一维数组,要求给出数组中对应位置的乘积,这个乘积是数组中不包含此位置元素的所有元素的乘积;并且要求时间复杂度在O(n);
解法:既然要求的是除当前元素外所有元素的乘积,我们就没有必要每一次都对除当前元素外的所有元素进行运算;我们可以首先计算出所有元素的乘积后除去当前元素就是最后的结果;这里需要注意的是元素中可能有0的存在,因此,我们需要统计出元素中零的个数,并且不对零进行累乘;
class Solution {
public int[] productExceptSelf(int[] nums) {
int mulAll = 1;
int zeroCount = 0;
int[] result = new int[nums.length];
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0) {
zeroCount++;
} else {
mulAll *= nums[i];
}
}
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
if (zeroCount == 0) {
result[i] = mulAll / nums[i];
} else {
result[i] = 0;
}
} else {
if (zeroCount == 1) {
result[i] = mulAll;
} else {
result[i] = 0;
}
}
}
return result;
}
}