题目描述
给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。
//O(n)
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
int n=A.size();
if(n<2) return {};
vector<int> res;
res.push_back(1);
for(int i=1;i<n;i++){ //从前往后扫描,构造前半部分乘积
res.push_back(res[i-1]*A[i-1]);
}
int tmp=1;
for(int i=n-2;i>=0;i--){ //从后向前,构建后半部分乘积,并与前半部分相乘
tmp*=A[i+1];
res[i]*=tmp;
}
return res;
}
};
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
int n = A.size();
if (n <= 0) {
return {};
}
vector<int> res(n, 1);
for (int i = 1; i < n; ++i) {
res[i] = res[i - 1] * A[i - 1];
}
int tmp = 1;
for (int i = n - 2; i >= 0; --i) {
tmp *= A[i + 1];
res[i] = res[i] * tmp;
}
return res;
}
};