2021年2月11日木曜日天気は良い[過去を嘆いたり、現在を無駄にしたり、未来を恐れたりしないでください]
1.はじめに
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 /