如何找到所有三个列表中的元素(最有效)

时间:2014-03-28 14:05:33

标签: c# algorithm dictionary

我使用C#,我有三个List<int>(比如大小n和不同的元素)。我的目标是找到所有三个元素。所以我可以迭代第一个并检查项目是否在另外两个。那将是O(n ^ 2)。我可以先对其他两个列表进行排序,然后使用二进制搜索检查其中的项目。那将是O(nlogn)(没有排序)。 或者我可以构造两个词典Dictionary<int, byte>,其中键将是我的列表的项目,然后检查项目将是O(1)和总O(n)。但是构建字典的价格怎么样?任何人都能说出这需要多少费用?

也许还有更高效的算法?

2 个答案:

答案 0 :(得分:4)

使用HashSet非常简单,我认为这是您表现最好的选择。

HashSet<T> hset = new HashSet<T>(list1);
hset.IntersectWith(list2);
hset.IntersectWith(list3);
return hset.ToList(); // skip the ToList() if you don't explicitly need a List

答案 1 :(得分:1)

您只能使用一个Dictionary<int, byte>,其中byte的值可以是1或2.对于第一个列表,您只需执行值等于1的插入,对于第二个列表,您执行{{1并且基于结果执行插入或更新,其值等于2.对于第三个列表,检查值是否为2.