题目:
给定一个数组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]。不能使用除法。
分析:
1.如果可以使用除法,最直观的方法就是使用连乘来得到B[i]。这样的方法时间复杂度为O(n2).
2.结合矩阵知识来解决这个问题。
2.结合矩阵知识
时间复杂度为O(n)的算法。
class Solution
{
public:
vector<int> multiply( const vector<int>& A )
{
vector<int> B( A.size() );
int length1 = A.size();
int length2 = B.size();
if ( length2 > 1 )
{
B[0] = 1;
for ( int i = 1; i < length1; ++i )
{
B[i] = B[i-1] * A[i-1];
}
double temp = 1;
for ( int i = length1-2; i >= 0; --i )
{
temp *= A[i+1];
B[i] *= temp;
}
}
return B;
}
};
156

被折叠的 条评论
为什么被折叠?



