剑指offer——03二维数组中的查找
题目描述
给定一个数组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]。不能使用除法。
题解:
将每一行分为两半部分,0,1,2....i-1 与 i+1.....n-1这两部分
利用下图所示的矩阵,左半部分从上向下,利用上一行答案求解,右半部分从下至上求解,利用下一行答案求解。
![](https://img2018.cnblogs.com/blog/1463063/201910/1463063-20191021163824539-820736215.png)
1 class Solution { 2 public: 3 vector<int> multiply(const vector<int>& A) { 4 int size = A.size(); 5 if (size < 1)return{}; 6 vector<int>res(size); 7 vector<int>C(size, 1), D(size, 1); 8 for (int i = 1, j = size - 2; i < size && j >= 0; ++i, --j) 9 { 10 C[i] = C[i - 1] * A[i - 1]; 11 D[j] = D[j + 1] * A[j + 1]; 12 } 13 for (int i = 0; i < size; ++i) 14 res[i] = C[i] * D[i]; 15 return res; 16 } 17 };