构建乘积数组
给定一个数组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]。不能使用除法。(注意:规定B[0]=A[1]* A[2]* …* A[n-1], B[N-1]=A[0]* A[1]* … A[n-2])*
题解:
将B[i]=A[0]* A[1]* …* A[i-1]* A[i+1]* …* A[n-1]分解为:A[0]* A[1]* …* A[i-1]与A[i+1] …* A[n-1]。因此,设定两个辅助空间,front[i]表示前i个A[i]相乘。back[i]表示后i个A[i]相乘,而B[i]=fron[i]*back[i]相乘。
实现代码如下:
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int> B;
int num=A.size();
if(num<2)
return B;
vector<int> front;
vector<int> back;
front.push_back(A[0]);
back.push_back(A[num-1]);
for(int i=1;i<num-1;i++){
front.push_back(front[i-1]*A[i]);
back.push_back(back[i-1]*A[num-i-1]);
}
B.push_back(back[num-2]);
for(int i=1;i<num-1;i++){
B.push_back(front[i-1]*back[num-i-2]);
}
B.push_back(front[num-2]);
return B;
}
};