0

私はこのコードを持っています...それは私が必要とすることをほぼ正確に行います。定義済みの int 配列から、合計がターゲット int になる 2 つの int を検索します。ただし、セル内に値を配置するのではなく、ベクトルに値を配置する場合、すべての値が一緒に配置されます。つまり、int array[50,40,30,20,10] とターゲット 50 の場合、[[50][40,10][30,20]...etc.] を返すのではなく、[[50,40] を出力します。 ,10,30,20...など]] どうすれば修正できますか?

public Vector<Vector<Integer>> subsetSum(int[] array, int target) {
    //creates vectors, adds inner vector to another vector
    outer = new Vector<Vector<Integer>>();
    inner = new Vector<Integer>();
    outer.add(inner);

    for (int k = 0; k < array.length; k++) {
        for (int l = 1; l < array.length; l++) {
            int sum = array[k]+array[l]; //sum of l and k
            if (sum == target) {
                //add l,k to vector
                inner.add(array[l]);
                inner.add(array[k]);
                //prints l and k if their sum equals target
                System.out.println(array[l]+"+"+array[k]+"="+target);
            }
            else {
                System.out.print("");
            }
        }
        //if k is the target, display
        if (array[k] == target) {
            //add k to vector
            inner.add(array[k]);
            //prints if int equals target
            System.out.println(array[k]+"="+target);
        }
    }
    //return combinations that add up to target in vector form
    return outer;
}
4

5 に答える 5

3

に単一のベクトルを追加するだけですouter。必要な合計に達するペアを見つけた場合、それらを個別のベクトルにしたいのではありませんか? そのため、それが発生したときに新しい「内部」ベクトルを作成し、それを に追加する必要がありますouter

次の行を削除します。

inner = new Vector<Integer>();
outer.add(inner);

変化する:

if (sum == target) {
    inner = new Vector<Integer>();
    outer.add(inner)
    //add l,k to vector
    inner.add(array[l]);
    inner.add(array[k]);

と:

if (array[k] == target) {
    inner = new Vector<Integer>();
    outer.add(inner)
    //add k to vector
    inner.add(array[k]);

最後に、innerandouterをローカル変数にすることを検討してください。

于 2011-10-20T04:10:49.857 に答える
0

次の 2 行を移動します。

inner = new Vector<Integer>();
outer.add(inner);

外側のループ (インデックス variable を持つものk)に

于 2011-10-20T04:10:24.247 に答える
0

また、ベクトルのベクトルを持つつもりですか? 現時点では、inner という名前のベクトルが 1 つ含まれているため、すべてが inner に直接追加されます。各ペアを入れるたびに新しいベクトルを作成するわけではありません。

于 2011-10-20T04:11:26.080 に答える
0

Deepa の答えは途中ですが、ループに値を追加する前にinner、ループ内に新しいインスタンスを作成する必要もあります。forそうしないと、 one 内のすべての値になってしまいますinner。このような:

final Vector<Integer> inner = new Vector<Integer>();
outer.add(inner);

continue追加した後、パフォーマンスを少し改善することもできます。

于 2011-10-20T04:13:11.913 に答える
0

あなたの間違いは、最初にアウターにベクター値を追加することにあると思うので、インナーベクターではなく、アウターベクターからすべての値を返します..条件を確認した後に追加する必要があります

    if (array[k] == target) {
        //add k to vector
        inner.add(array[k]);
        //prints if int equals target
        System.out.println(array[k]+"="+target);
    }
    outer.add(inner)
于 2011-10-20T04:08:57.517 に答える