アレイ51製品の構築

タイトル説明

配列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;
    }
公開された118元の記事 ウォンの賞賛8 ビュー3717

おすすめ

転載: blog.csdn.net/qq_34761012/article/details/104473650