劍指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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章