algorithm - 当有多个重复元素时在数组中查找重复项

标签 algorithm duplicates

当有多个重复元素时,如何在数组中找到重复项?

当数组只有一个重复元素时(例如:1,2,3,4,4,4,5,6,7)则很简单:

int duplicate(int* a, int s)
{ 
    int x = a[0];
    for(int i = 1; i < s; ++i)
    {
        x = x ^ a[i];
    }
    for(int i = 0; i < a[s]; ++i)
    {
        x = x ^ i;
    }
    return x;
}

但如果输入数组包含多个重复元素(例如:1, 2, 2, 2, 3, 4, 4, 4, 5, 6, 7),上述方法将不起作用。我们怎样才能在 O(n) 时间内解决这个问题?

最佳答案

如果空间不是问题或最大数量很低,您可以简单地使用一种位数组并通过在数字位置设置位来标记所有已经出现的数字。

它是一种具有普通(身份)散列函数的 HashSet。 测试和设置花费 O(1) 时间。

关于algorithm - 当有多个重复元素时在数组中查找重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20466350/

相关文章:

均匀分布位但密度增加的算法

c++ - 使用给定的节点数和不相邻边列表查找最大团

c - 查找数组中的重复项

php - MySQL Remove/Combine Similar Rows 及其引用

algorithm - 找到最近的nice number

java - 如何检查曲线是否相似

r - 在保留数据帧结构的同时合并 R 中的重复字符

Android:当我启动一个新 Activity 并按返回返回时,Listview 会 self 复制

java - 唯一约束 - 键已存在于多对多中

Python:如何从字符串部分列表中仅按顺序组合生成,使用是可选的