剑指offer——构建乘积数组

题目描述:
给定一个数组A[0,1,...,n1]A[0,1,...,n-1],请构建一个数组B[0,1,...,n1]B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i1]A[i+1]...A[n1]B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。

思路:
在这里插入图片描述
如图所示:需要计算的B[i]B[i]可以分成两部分求解,按照对角线划分为两部分。前半部分定义为C[i]=A[0]+A[1]+...+A[i1]C[i]=A[0]+A[1]+...+A[i-1],后半部分定义为D[i]=A[i+1]+A[i+2]+...+A[n1]D[i]=A[i+1]+A[i+2]+...+A[n-1]B[i]=C[i]D[i]B[i]=C[i]*D[i]

class Solution {
public:
    vector<int> multiply(const vector<int>& A) {
        if(A.size()<2)
            return {};
        int n=A.size();
        vector<int> res(n);
        res[0]=1;
        for(int i=1;i<n;i++){
            res[i]=res[i-1]*A[i-1];
        }
        int temp=1;
        for(int i=n-2;i>=0;i--){
            temp*=A[i+1];
            res[i]*=temp;
        }
        return res;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章