1、题目描述
输入一个数组nums,返回一个数组,返回数组每个位置的值为nums数组中除去该位置的所有位置的乘积。
2、思路
不可以用除法,时间复杂度要O(n)。
那么为了求ans[i]可以将其分为左右两部分。
也就是一共要遍历数组两次,第一次让每个ans[i]都乘以i的左半部分的数字;
第二次让每个ans[i]都乘以i右半部分的数字。
3、代码
vector<int> productExceptSelf(vector<int>& nums) {
int n = nums.size();
vector<int>ans(n,1);
int mul = 1;
//left
for(int i=1;i<n;i++){
mul*=nums[i-1];
ans[i]*=mul;
}
mul = 1;
//right
for(int i=n-2;i>=0;i--){
mul*=nums[i+1];
ans[i]*=mul;
}
return ans;
}