如何从数组中删除重复项

时间:2011-01-02 06:06:05

标签: arrays algorithm

  

可能重复:
  Array remove duplicate elements

这是一个家庭作业问题。我认为最好的方法是修改后的merge sort,其中修改后的merge只是不会将两个输入数组中的重复元素复制到结果数组中。复杂度为O(N * logN)(与常规merge sort完全相同)。是否有意义 ?有没有更好的解决方案?

3 个答案:

答案 0 :(得分:4)

如果您不需要排序,只需使用HashSet(或等效的语言)删除可在O(N)时间完成的重复项。

答案 1 :(得分:1)

听起来不错。或者您可以进行任何排序,然后删除复杂度为O(N)...

的重复项

答案 2 :(得分:0)

首先,您必须对数组进行排序因为它是一个排序数组,所以重复数据将彼此相邻。所以从头开始,将每个元素与右边的邻居进行比较。如果没有重复,那么你进行了n-2次比较,你就完成了。

如果你发现重复,你将会有一个漏洞。由于它是一个数组而不是链接列表,因此您需要将每个元素向下移动。 (如果允许的话,你可以创建一个新的数组。)但是你不只是想开始向下移动所有东西,你可以简单地用指针或计数器标记孔,并继续进行下一次比较。当你获得下一个非重复时,你将该元素移动(复制)到孔中并将孔计数器增加1.