我有一个未排序的列表,我想从中删除重复项。在C中执行此操作的效率最高。在我的示例中,列表是数组的链接列表。换句话说,几个数组链接在一起。重复项只能在不同的数组中进行。因此,例如,内部数组1中不能有重复,但在数组1和2中可以找到相同的数字。
答案 0 :(得分:4)
这基本上是对Element Distinctness Problem的修改。该链接经历了几种可能的解决方案。
一个常见而简单的解决方案是对列表进行排序并通过排序列表,删除任何重复项。这将为您提供O(n * log(n))算法
如果使用哈希表,可以做得更好(O(n))。遍历数组,将每个元素插入哈希表。如果你发生碰撞,你可能已经发现了重复,你可以快速比较这两个元素。