【ソードフィンガー】-66-製品配列を構築する

 

この質問の難しさは、除算を使用できず、二重ループを使用できない場合、タイムアウトになることです。

アイデア:left [i]を使用してa [i]の左側にすべてのデータの積を格納し、right [i]はa [i]の右側にあるすべてのデータの積を表し、res [i] = right [ i] *左[i]

class Solution {
public:
    vector<int> constructArr(vector<int>& a) {
        int n=a.size();
        vector<int> res(n);
        if(n==0)return res;
        vector<int> left(n);
        vector<int> right(n);
        left[0]=right[n-1]=1;
        for(int i=1;i<n;i++)
            left[i]=left[i-1]*a[i-1];
        for(int i=n-2;i>=0;i--)
            right[i]=right[i+1]*a[i+1];
        for(int i=0;i<n;i++)
            res[i]=left[i]*right[i];
        
        
        return res;
    }
};

 

おすすめ

転載: blog.csdn.net/qq_39328436/article/details/114760417