思路
simple的方法就是使用除法,先得出整个数组的元素乘积(注意越界),然后每位除以该位元素,就能够得到结果。但是题目要求是不能使用除法,而且复杂度要求为O(N). 那么我们可以这么做,先从头到尾扫一边,得到前面所有元素的乘积,第一位设置为1,这样,最后一个数是满足题意的。其他还需要继续相乘,所以我们这次从尾开始扫一边,这样就能得到题的结果了。下面是实现代码:
vector<int> productOfArray(vector<int>& nums)
{
int n=nums.size();
vector<int> res(n,1);
for(int i=1;i<n;++i)
res[i]=res[i-1]*nums[i-1];
int right=1;
for(int i=n-1;i>=0;--i){
res[i]*=right;
right*=nums[i];
}
return res;
}