给定长度为 n 的整数数组 nums
,其中 n > 1,返回输出数组 output
,其中 output[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积。
示例:
输入:[1,2,3,4]
输出:[24,12,8,6]
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
就是新建两个数组,前一个数组pre第i位存原数组i位之前所有数的乘积复杂度n;第二个after存第i位之后的乘积,复杂度n,最后遍历数组,计算数组pre[i]*after[i]就是ans[i]。三个循环并列,复杂度O(N).
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int s=1;
int rs=1;
int n=nums.size();
vector<int>pre(n);
vector<int>after(n);
vector<int>output(n);
for(int i=1;i<=n-1;i++)
{
rs=rs*nums[n-i];
after[n-i-1]=rs;
s=s*nums[i-1];
pre[i]=s;
}
after[n-1]=1;
pre[0]=1;
for(int i=0;i<=n-1;i++)
{
output[i]=pre[i]*after[i];
}
return output;
}
};