要求:如题,时间要O(n)
思路:算前缀积后缀积再相乘
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int n=nums.size();
vector<int> left(n,1),right(n,1),ans(n,1);
for(int i=1;i<n;++i)
left[i]=nums[i-1]*left[i-1];
for(int i=n-2;i>=0;--i)
right[i]=nums[i+1]*right[i+1];
for(int i=0;i<n;++i)
ans[i]=left[i]*right[i];
return ans;
}
};
空间优化到剩下输出数组
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int n=nums.size();
vector<int> ans(n,1);
for(int i=1;i<n;++i)
ans[i]=nums[i-1]*ans[i-1];
int r=1;
for(int i=n-2;i>=0;--i){
r*=nums[i+1];
ans[i]*=r;
}
return ans;
}
};