leetcode Product of Array Except Self

来源:互联网 发布:php不支持mysql 编辑:程序博客网 时间:2024/04/29 09:24
/*
时间要求是O(n),可以这样遍历数组,从前往后和
从后往前,sum_pre[i]表示从数组第一个数开始到第i
个数的乘积即nums[0]*nums[1]...nums[i],sum_back[i]
表示从数组末位数字开始nums[len-1]*nums[len-2]...nums[i]
的乘积,这样对于最终的结构数组ans[i]=sum_pre[i-1]*sum_back[i+1]
这里应该保证i-1>=0&&i+1<=len-1,如果i=0&&i+1<=len-1,则ans[i]=sum_back[i+1]
如果i-1>=0&&i+1=len-1则ans[i]=sum_pre[i-1],如果i=0&&i==len-1,也就是nums
数组只有一个元素,则ans[i]=0;
*/
 class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int len=nums.size();
vector<int> sum_pre;
sum_pre.resize(len);
vector<int> sum_back;
sum_back.resize(len);
vector<int> ans;
ans.resize(len);
sum_pre[0]=nums[0];
for(int i=1;i<len;i++)
{
sum_pre[i]=sum_pre[i-1]*nums[i];
}
sum_back[len-1]=nums[len-1];
for(int i=len-2;i>=0;i--)
{
sum_back[i]=sum_back[i+1]*nums[i];
}
for(int i=0;i<len;i++)
{
if(i-1>=0&&i+1<=len-1) ans[i]=sum_pre[i-1]*sum_back[i+1];
else if(i==0&&len>=2) ans[i]=sum_back[i+1];
else if(i>=1&&i==len-1) ans[i]=sum_pre[i-1];
else ans[i]=0;
}
return ans;
    }
};
0 0