製品配列を構築するためのJianzhiオファーの実現

製品配列の構築を実現する

タイトル説明

配列A [0,1、…、n-1]が与えられた場合、配列B [0,1、…、n-1]を作成してください。ここで、Bの要素は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];)
Aの長さが1の場合、Bは無意味で構築できないため、このような状況は発生しません。

ソリューションのアイデア

乗算を使用して問題を分析することはできないため、積を2つの項に分割できます。これは:

C [i] = A [0] * A [1] *…* A [i-1]
D [i] = A [i +1] A [n-1]
B [i] = C [i] * D [i]
数学的帰納法を使用して、最初にC [i]を計算しましょう。

C [0] = 1
C [1] = A [0]
C [2] = A [0] * A [1]
C [3] = A [0] * A [1] * A [2]

私たちルールは次のように描くことができます。C[i] = C [i-1] * A [i -1](i> = 1)
D [i]の計算には、引き続き数学的帰納法を使用します。

D [n-1] = 1
D [n-2] = A [n -1]
D [n-3] = A [n-1] * A [n-2]次
の法則を描くことができます:D [i ] = D [i + 1] * A [i + 1](i <= n-2)

この質問は、Java言語で次のように書かれています。

import java.util.ArrayList;
public class Solution {
    
    
    public int[] multiply(int[] A) {
    
    
        if (A == null || A.length <= 0) {
    
    
            return null;
        }
 
        int[] C = new int[A.length];
        C[0] = 1;
        for (int i = 1; i < C.length; i++) {
    
    
            C[i] = C[i - 1] * A[i - 1];
        }
 
        int[] D = new int[A.length];
        D[D.length - 1] = 1;
        for (int i = D.length - 2; i >= 0; i--) {
    
    
            D[i] = D[i + 1] * A[i + 1];
        }
 
        int[] result = new int[A.length];
        for (int i = 0; i < result.length; i++) {
    
    
            result[i] = C[i] * D[i];
        }
        return result;
    }
 
}

おすすめ

転載: blog.csdn.net/as1490047935/article/details/110246105