剑指offer 构建乘积数组

题目描述

给定一个数组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]。不能使用除法。

思路:

B0:       A1    A2。。。。。。An-1

B1:A0           A2。。。。。。An-1

B2:A0  A1          。。。。。  An-1 

。。。。。。。。。。。。。。An-1

Bn-1:A0 。。。。。。An-2         

先求下三角,在求上三角,时间复杂度O(n);

代码:

class Solution {
public:
    vector<int> multiply(const vector<int>& a) {
        vector<int>b;
        int n=a.size();
        b.push_back(1);
        for(int i=1;i<n;i++)//先求下三角
            b.push_back(b[i-1]*a[i-1]);
        int r=a[n-1];
        for(int i=n-2;i>=0;i--){//在求上三角
            b[i]*=r;
            r*=a[i];
        }
        return b;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_42130471/article/details/80699081