我需要在多个预先排序的列表中找到所有的公共元素(如果所有列表中都存在重复项,那么它们必须被列出同样多次)。列表的数量将由用户决定。我正在尝试找到一个O(n)效率的算法。
我一直在研究下面的代码,但是如果我不知道有多少个列表的话,我就不知道如何让它工作:
Integer[] a = {2, 2, 4, 6, 7, 11};
Integer[] b = {2, 2, 3, 5, 7, 14}
int i = 0;
int j = 0;
while(i < a.length && j < b.length) {
if(a[i] == b[j]) {
System.out.print(a[i] + " ");
i++;
j++;
} else if(a[i] > b[j]) {
j++;
} else {
i++;
}
}
期望输出:二二七
3条答案
按热度按时间5cnsuln71#
下面的代码是针对
List
而不是数组的,因为处理列表的动态数量稍微复杂一些,但是它支持所有List
、Collection
和Iterable
类型。它适用于任何类型的
Comparable
值列表,例如Integer
、Long
、Double
、String
、Date
...可以根据需要修改代码以处理
Integer[]
或int[]
,或者任何其他数字基元类型,但是您必须克隆每种数组类型的代码。未进行验证。列表必须预先排序,并且不允许为空。
hmae6n7t2#
我觉得这个有用,但我只在几个案子上用过。
envsm3lx3#
List接口提供了retainAll方法,该方法只保留所提供列表中源代码中的公共元素。
打印:[2,2,7]