构建乘积数组

来源:互联网 发布:模拟矩阵控制键盘 编辑:程序博客网 时间:2024/06/05 22:49
题目:给定一个数组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;    }};
原创粉丝点击