题目
给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。
思路
用两个dp数组记录,第一个dp记录从头的连乘,第二个dp记录从后面的连乘。
代码
class Solution {
public:
vector<int> constructArr(vector<int>& a) {
int dp1[100005], dp2[100005], n = a.size();
dp1[1] = 1;
dp2[n] = 1;
for(int i = 0;i < n;i++) dp1[i + 2] = dp1[i + 1] * a[i];
for(int i = n - 1;i > 0;i--) dp2[i] = dp2[i + 1] * a[i];
vector<int> ans;
for(int i = 0;i < n;i++) ans.push_back(dp1[i + 1] * dp2[i + 1]);
return ans;
}
}