配列A [0,1、...、n-1]を指定して、配列B [0,1、...、n-1]を作成してください。ここで、要素B [i] = A [ 0] * A [1] * ... * A [i-1] * A [i + 1] * ... * A [n-1]。除算は使用できません。(注:プロビジョニングB [0] = A [1] * A [2] * ... * A [n-1]、B [n-1] = A [0] * A [1] * ... * A [n-2];)
クラスSolution { public : vector < int > multiply(const vector < int >&A){ int n = A.size(); ベクトル < int > B1(n、1 ); ベクトル < int > B2(n、1 ); ベクトル < int > B(n、1 ); for(int i = 1 ; i <n; ++ i){ B1 [i] = B1 [i- 1 ] * A [i- 1 ]; } for(int i = n- 2 ; i> = 0 ; -i){ B2 [i] = B2 [i + 1 ] * A [i + 1 ]; } for(int i = 0 ; i <n; i ++ ){ B [i] = B1 [i] * B2 [i]; } Bを返す; } };
2つの配列B1、B2を使用して、位置iの前後の積の合計を保存してから、これらの2つの配列を乗算して新しい配列を生成し、積の配列を取得します。