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 ofnums
except nums[i]
.
Solve it without division and in O(n).
For example, given [1,2,3,4]
, return [24,12,8,6]
.
因为题目规定不能用除法并且是线性时间复杂度,因此不能将给定数组的所有项先乘起来再除掉具体位置上的项,也不能使用两层循环。考虑先将给定数组按下标从小到大扫描一遍,逐个相乘,得到各项的下标比自己小的所有项的乘积;再将给定数组按下标从大到小扫描一遍,逐个相乘,得到各项的下标比自己大的所有项的乘积,再与前面得到的乘积相乘,就求出各项除了自身以外其他所有项的乘积。
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int n=nums.size();
vector<int> r(n,1);
int m=1;
for(int i=1;i<n;i++)
{
m*=nums[i-1];
r[i]=m;
}
m=1;
for(int i=n-1;i>=0;i--)
{
r[i]*=m;
m*=nums[i];
}
return r;
}
};