我有一个非常非常大的未排序字符串数组,我需要检查是否有重复项。
检查此方法的最有效方法是什么?
答案 0 :(得分:5)
最简单的方式可能是:
if (strings.Length != strings.Distinct().Count())
{
// There are duplicates
}
那将是O(n) - 但它不会告诉你哪些项目是重复的。
可替换地:
HashSet<string> values = new HashSet<string>();
foreach (string x in strings)
{
if (!values.Add(x))
{
// x was a duplicate
}
}
同样,这应该摊销O(n)。
请注意,如果您希望进行不区分大小写的比较,则可以指定其他IEqualityComparer<string>
。
答案 1 :(得分:0)
遍历列表,并将每个元素放在已排序的树中。这样,您可以及早发现是否存在重复。