题目:给定一个数组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];)
代码:
class Solution { public: vector<int> multiply(const vector<int>& A) { int length=A.size(); vector<int> B(length); int temp=1; for(int i=0;i<length;i++){ B[i]=temp; temp*=A[i]; } temp=1; for(int i=length-1;i>=0;i--){ B[i]*=temp; temp*=A[i]; } return B; } };
我的笔记:
将数组计算分为上下两部分进行,第一段迭代计算下三角,第二段迭代计算上三角。
1 | A1 | A2 | ... | An-2 | An-1 |
A0 | 1 | A2 | ... | An-2 | An-1 |
A0 | A1 | 1 | ... | An-2 | An-1 |
A0 | A1 | A2 | 1 | An-2 | An-1 |
A0 | A1 | A2 | ... | 1 | An-1 |
A0 | A1 | A2 | ... | An-2 | 1 |