构建乘积数组

Desicription

给定一个数组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]。不能使用除法。

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int> prefix(A.size(), 1);
vector<int> suffix(A.size(), 1);
vector<int> result(A.size(), 1);
for(int i = 0; i < A.size(); i++) {
prefix[i] = i ? A[i] * prefix[i - 1] : prefix[i];
}
for(int i = A.size() - 1; i >= 0; i--) {
suffix[i] = i == A.size() - 1 ? A[i] : suffix[i + 1] * A[i];
}
for(int i = 0; i < A.size(); i++) {
if(i - 1 >= 0) {
result[i] *= prefix[i - 1];
}
if(i + 1 < A.size()) {
result[i] *= suffix[i + 1];
}
}
return result;
}
};