矢量内的矢量

时间:2011-10-20 03:59:07

标签: java arrays vector multidimensional-array subset-sum

我有这个代码......这正是我所需要的。它在预定义的int数组中搜索两个总和达到目标int的整数。但是,将值放入向量时,不是将它们放在单元格中,而是将所有值放在一起。 即对于int数组[50,40,30,20,10]和目标50,而不是返回[[50] [40,10] [30,20] ......等],它打印[[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;
}

5 个答案:

答案 0 :(得分: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]);

最后,考虑将innerouter纳入本地变量。

答案 1 :(得分: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)

答案 2 :(得分:0)

移动这两行:

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

进入外部循环(具有索引变量k的那个。)

答案 3 :(得分:0)

另外,你打算有一个向量载体吗?因为此刻,你有一个向量,其中有一个名为inner的向量,所以所有东西都被直接添加到内部。每次放入每个对时,都不会创建新的向量。

答案 4 :(得分:0)

Deepa的回答是中途,但您还需要在inner循环中创建for的新实例,然后再向其中添加值;否则,你最终会得到一个inner内的所有值。像这样:

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

添加后,您还可以continue稍微提高性能。