c# - 如何查找所有三个列表中存在的元素(最有效)

标签 c# algorithm dictionary

我使用 C#,我有三个 List<int> (假设大小相同且元素不同)。我的目标是找到这三个中都存在的元素。所以我可以迭代第一个并检查项目是否在其他两个中。那将是 O(n^2)。我可以先对其他两个列表进行排序,然后使用二分搜索检查其中的项目。那将是 O(nlogn) (不排序)。 或者我可以构建两个字典 Dictionary<int, byte> ,其中键是我列表中的项目,然后检查某个项目的时间复杂度为 O(1),总时间复杂度为 O(n)。但是构建词典的价格又如何呢?谁能告诉一下这要多少钱吗?

也许还有更有效的算法?

最佳答案

使用 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

关于c# - 如何查找所有三个列表中存在的元素(最有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22715080/

相关文章:

c# - 使用 Microsoft.Hadoop.Client 的 LINQ to HDInsight Hive 表

c# - d :DesignInstance with an interface type

java - 选择排序不起作用

c# - 在集合中找出比它们大的数

c++ - 将自定义类型作为 map 的可能键的可能方法有哪些

c# - C# XNA 与 Farseer Physics 中的 OnCollision 事件处理程序问题

c# - 如何从一个 Visual C# 项目构建两个不同的应用程序?

algorithm - NP 完全 VS NP 困难

javascript - 在我的 android 程序中在哪里编写 JavaScript

ios - 我可以自定义 UIReferenceLibraryViewController 的外观和 "Done"按钮吗?