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