Jianzhiオファー66.製品配列を作成します(左右の弓)

2021年2月11日木曜日天気は良い[過去を嘆いたり、現在を無駄にしたり、未来を恐れたりしないでください]


この記事の内容


1.はじめに

JianZhiオファー66.製品配列を構築する

ここに画像の説明を挿入

2.解決策

画像ソースKrahets、侵入および削除されました。
ここに画像の説明を挿入
上の図に示すように、2つのサイクルを使用できます。最初のラウンドは左下隅の積を計算し、2番目のラウンドは右上隅の積を計算し、次にそれを左下隅の積で乗算します。最終結果を取得します。

もちろん、スイッチヒッターが問題を解決することも計算できますが、製品の計算値は左右に循環問題です。コードは次のように表示されます。

class Solution {
    
    
public:
    vector<int> constructArr(vector<int>& a) {
    
    
        int n = a.size();
        vector<int> res(n, 1);
        // 左右开弓
        int left = 1, right = 1;
        for(int i = 0; i < n; i++){
    
    
            res[i] *= left; // res[i]表示右边数乘积,在乘以左边数乘积left,即是结果
            left *= a[i]; // 提前计算好下一个位置左边所有数的乘积

            res[n-i-1] *= right; // res[n-i-1]表示左边数乘积,在乘以右边数乘积right,即是结果
            right *= a[n-i-1]; // 提前计算好下一个位置右边所有数的乘积
        }
        return res;
    }
};

参照

「ソードフィンガーオファー第2版」

https://leetcode-cn.com/problems/gou-jian-cheng-ji-shu-zu-lcof/solution/mian-shi-ti-66-gou-jian-cheng-ji-shu-zu-biao- ge-fe /

おすすめ

転載: blog.csdn.net/m0_37433111/article/details/113789120