Product of Array Except Self
题目描述:
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]
.
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.)
思路:
基本思路:把所有元素相乘,再除以对应位置的元素数字,便得到除了自身元素之外,其他所有元素的乘积。
例外情况:若自身元素为0,则不能作为除数。
解决办法:记录所有元素的乘积product,非0元素的乘积pro,0元素个数cnt。
a:若0元素个数>=2,所求所有乘积都为0;
b:若自身元素不为0,且0元素个数<2,使用product/自身元素,获得乘积。
c:若自身元素为0,且0元素个数<2, pro就是所求的乘积。
代码:
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int n = nums.size();
int product = 1;
int pro0 = 1;
int cnt0 = 0;
for(int i = 0; i < n; i ++)
{
int num = nums[i];
if(num != 0)
product *= num;
else
++cnt0;
pro0 *= num;
}
for(int i = 0; i < n; i ++)
{
if(cnt0 > 1)
nums[i] = 0;
else
{
int num = nums[i];
if(num != 0)
{
nums[i] = pro0/nums[i];
}
else
{
nums[i] = product;
}
}
}
return nums;
}
};