【问题标题】:What kind of helper method would I need to find an intersection between two arraylists?! (recursion only)我需要什么样的辅助方法来找到两个数组列表之间的交集?! (仅递归)
【发布时间】:2014-10-04 02:59:01
【问题描述】:

所以我有方法

public ArrayList<String> intersection( ArrayList<String> A1, ArrayList<String> A2)

我不确定我的辅助方法会返回一个 ArrayList,其中包含 A1 和 A2 中的元素,* 按照它们在 A1 中出现的顺序 *,并且 * 保持 A1 和 A2 不变*

这是我写在 main 中测试的。

ArrayList A1 = new ArrayList();
ArrayList A2 = new ArrayList();
A1.add("a"); A1.add("b"); A1.add("c");
A2.add("b"); A2.add("c"); A2.add("d"); A2.add("e");
ArrayList intersect = Practice.intersection(A1,A2);
System.out.println(A1 + " intersect " + A2 + " = " + intersect);    

我想要的示例输出是 [a, b, c] 相交 [b, c, d, e] = [b, c]

【问题讨论】:

  • 当输入为[a,b,c][c,b,d,e] 时,您的期望是什么?
  • 期望输出?如果这就是你要问的,那么同样的事情 [b,c]

标签: java recursion arraylist intersection


【解决方案1】:

如果我对您的理解正确,您希望为您的intersection 方法提供一个递归 实现。基本上,您想遍历a1 并检查每个元素,它是否包含在a2 中。

您可以使用递归遍历a1:在每一步中,删除列表中的head,并检查它是否包含在a2 中,然后从@ 的交集处取出addAll 元素987654328@ 和a2

查看代码:它应该是不言自明的。

public static void main(String[] args) {
    ArrayList<String> a1 = new ArrayList<String>();
    ArrayList<String> a2 = new ArrayList<String>();
    a1.add("a"); a1.add("b"); a1.add("c");
    a2.add("b"); a2.add("c"); a2.add("d"); a2.add("e");
    ArrayList<String> intersect = intersection(a1, a2);
    System.out.println(a1 + " intersect " + a2 + " = " + intersect);
}

static <A> ArrayList<A> intersection(ArrayList<A> a1, ArrayList<A> a2){
    if(a1.isEmpty())
        return a1;
    else {
        ArrayList<A> result = new ArrayList<A>();
        A head = a1.get(0);
        if (a2.contains(head)) 
            result.add(head);
        ArrayList<A> tail = new ArrayList<>();
        tail.addAll(a1.subList(1, a1.size()));
        result.addAll(intersection(tail, a2));
        return result;
    }
}

Java 的可变列表有一个小缺陷:请注意,您可以通过一个简单的操作获得headtaila1.remove(0)。但是,如果您不先制作防御性副本,那么您将修改您原来的a1,这绝对不是您想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 2020-12-27
    • 2014-05-03
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多