思路
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;
}