簡體   English   中英

向量內的向量

[英]Vectors within a vector

我有這段代碼...幾乎可以滿足我的需要。 它在一個預定義的int數組中搜索兩個int,它們總計為一個目標int。 但是,將值放入向量中而不是將其放在單元格中時,它將所有值放在一起。 即對於int array [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;
}

您只向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成為局部變量。

我認為您的錯誤首先在於在外部添加向量值,因此它僅從外部向量返回所有值,而不是在內部向量中返回..必須在檢查條件后添加

    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)

移動這兩行:

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

進入外循環(索引變量為k那個)。

另外,您是否打算擁有向量的向量? 因為目前您有一個向量,其中有一個名為inner的向量,所以所有內容都直接添加到了inner。 您並不是每次都在創建新矢量來放入每對。

Deepa的答案就在那兒,但您還需要在for循環inner創建一個inner的新實例,然后再向其中添加值。 否則,您將最終將所有值包含在一個inner 像這樣:

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

您也可以在添加后continue以提高性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM