タイトル説明
配列A [0,1、...、N-所与 1]、 構築してください配列B [0,1、...、N- 1]、 Bが要素B [I] = A [0]であるA [ 。1] ... A * [1-I] 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];)
アイデア解析
- アイデア:暴力的な解決策、2サイクル、O(N ^ 2)の複雑さ。
- 二つのアイデア:B [i]の値は、行列の値は、2つの部分を乗算する、上部計算と下三角に対応し、対角であるとみなすことができます。
- 簡略化のために、また、三角形を上下に2つのメモリアレイを使用し、最後に掛け横断。
安全性を証明するために、図ボロー牛のゲストブック
コードの実装
public int[] multiply(int[] A) {
int[] B=new int[A.length];
B[0]=1;
//从上往下计算下三角
for (int i = 1; i <A.length; i++) {
B[i]=B[i-1]*A[i-1];
}
//从下往上计算上三角
int tmp=1;
for (int i = A.length-2; i >=0 ; i--) {
tmp*=A[i+1];
B[i]*=tmp;
}
return B;
}