leetcode238.除自身意外数组的乘积
方法一:最直观的想法就是把所有元素累乘起来,最后遍历除以每一个元素就能得到目标数组,但是要注意0元素的影响,如果没有0元素直接全部累乘,如果存在1个0元素,那么只有0元素所在位置为总的非零累乘积,如果存在多个0元素那么结果是全0
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> result(nums.size(),0);
vector<int> zeroArr;
int multi=1;
for(int i=0;i<nums.size();i++){
if(nums[i]==0)
zeroArr.push_back(i);
else
multi*=nums[i];
}
if(zeroArr.size()==0){
for(int i=0;i<nums.size();i++)
result[i]=multi/nums[i];
}else if(zeroArr.size()==1)
result[zeroArr[0]]=multi;
return result;
}
};
方法二:使用前缀积和后缀积,前缀积求当前元素左边所有元素的乘积,后缀积求当前元素右边所有元素的乘积,二者相乘就是当前的结果
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> result(nums.size(),1);
int prefix=1;
for(int i=0;i<nums.size();i++){
result[i]*=prefix;
prefix*=nums[i];
}
int postfix=1;
for(int i=nums.size()-1;i>=0;i--){
result[i]*=postfix;
postfix*=nums[i];
}
return result;
}
};