【发布时间】:2015-12-12 08:31:58
【问题描述】:
我需要在多个预先排序的列表中找到所有常见元素(如果所有列表中都存在重复项,则它们必须列出多次)。列表的数量将由用户确定。我正在尝试找到一种具有 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++;
}
}
期望的输出:2 2 7
【问题讨论】:
-
使用
Sets 代替这种方法,效率为O(N)。 -
@LuiggiMendoza 这不包括重复的情况。除非你有一些图书馆的
Multiset。 -
@immibis 好吧,使用
Map<Integer, Integer>,其中键是元素,值是该键有多少元素的计数器。Set只是Map<WhateverKeyYouWantOrNeed, Boolean> -
@LuiggiMendoza 是否使用 Set 处理未知数量的列表,直到运行时?
-
在运行前未知数量的列表是什么意思?
标签: java arrays sorting search collections