知识点
前缀积
思路
设nums数组长度为n 由于题意不允许使用除法,所以我们可以分别维护从左往右的前缀积l[i]和从右往左的前缀积r[i]。 除了头部两个以及尾部两个(下标为0,1,n-1,n-2)以外,对其余i的答案则为
l[i-2]*r[i-2]
遍历一遍更新答案即可
代码
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型vector
*/
vector<int> productExceptSelf(vector<int>& nums) {
// write code here
int l[10005];
int r[10005];
l[0]=nums[0];
r[nums.size()-1]=nums[nums.size()-1];
for(int i=1;i<nums.size();i++)
{
l[i]=l[i-1]*nums[i];
}
for(int i=nums.size()-2;i>=0;i--)
{
r[i]=r[i+1]*nums[i];
}
vector<int>ans;
for(int i=0;i<nums.size();i++)
{
if(i==0||i==1)ans.push_back(r[i+2]);
else if(i==nums.size()-1||i==nums.size()-2)ans.push_back(l[i-2]);
else
{
ans.push_back(l[i-2]*r[i+2]);
}
}
return ans;
}
};