leetcode Product of Array Except Self

/*
时间要求是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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值