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.)
题意:
给出一个数组,要求求出数组b,是的数组b第i个数是给出的数组除了第i个数其它的数之积。
思路:
一开始都会想着求整个数组之积,求第i项就除一下,这种思路遇到0很麻烦,因为不能除0.所以用两个数组来保存从0-i之积和从n-1到i之积,再求出即可。
代码:
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int>p;
int n=nums.size();
int a[n]={1};
int b[n]={1};
a[0]=nums[0];
b[0]=nums[n-1];
for(int i=1;i<n;i++)
{
a[i]=nums[i]*a[i-1];
b[i]=b[i-1]*nums[n-i-1];
}
p.push_back(b[n-2]);
for(int i=1;i<n-1;i++)
p.push_back(a[i-1]*b[n-i-2]);
p.push_back(a[n-2]);
return p;
}
};