#题目描述
![7c7a7cb0ec75c6d04683413db74b0e2b.png](https://i-blog.csdnimg.cn/blog_migrate/88a3986c6d81fc7d47bcfee8e21abfd1.jpeg)
#思路1:
创建两个数组,一个用于记录某元素前元素的乘积,一个用于记录某元素后元素的乘积,最后用两个元素进行逐元素相乘即可
#实现:
vector<int> productExceptSelf(vector<int> &nums)
{
int n = nums.size();
vector<int> left(n, 1);
vector<int> right(n, 1);
vector<int> res(n, 1);
for(int i = 1; i < nums.size(); i++)
{
left[i] = left[i-1] * nums[i-1];
}
for(int j = nums.size()-2; j>=0; j--)
{
right[j] = right[j+1] * nums[j+1];
}
for(int i = 0; i<nums.size(); i++)
{
res[i] = left[i] * right[i]
}
return res;
}
#思路2:
同上述思路,但是仅用left,right变量去代替一个向量
#实现
vector<int> productExceptSelf(vector<int> &nums)
{
int n = nums.size();
int left = 1, right = 1;
vector<int>res(n, 1);
for(int i = 1; i<nums.size(); i++)
{
res[i] *= left;
left *= nums[i];
}
for(int j = n-1; j>=0; j--)
{
res[j] *= right;
right *= nums[j];
}
return res;
}