这是一个家庭作业问题。我认为最好的方法是修改后的merge sort
,其中修改后的merge
只是不会将两个输入数组中的重复元素复制到结果数组中。复杂度为O(N * logN)(与常规merge sort
完全相同)。是否有意义 ?有没有更好的解决方案?
答案 0 :(得分:4)
如果您不需要排序,只需使用HashSet(或等效的语言)删除可在O(N)时间完成的重复项。
答案 1 :(得分:1)
听起来不错。或者您可以进行任何排序,然后删除复杂度为O(N)...
的重复项答案 2 :(得分:0)
首先,您必须对数组进行排序因为它是一个排序数组,所以重复数据将彼此相邻。所以从头开始,将每个元素与右边的邻居进行比较。如果没有重复,那么你进行了n-2次比较,你就完成了。
如果你发现重复,你将会有一个漏洞。由于它是一个数组而不是链接列表,因此您需要将每个元素向下移动。 (如果允许的话,你可以创建一个新的数组。)但是你不只是想开始向下移动所有东西,你可以简单地用指针或计数器标记孔,并继续进行下一次比较。当你获得下一个非重复时,你将该元素移动(复制)到孔中并将孔计数器增加1.