我有一系列项目,我需要找到匹配的项目(重复项目)。我现在运行最简单的O(n ^ 2)算法。项目类型并不重要,但如果你想知道它的形象。
myarray;
for(i = 0; i < myarray.length - 1; i++)
for(int j = i+1; j < myarray.length; j++)
if(myarray[i] = myarray[j])
output(names of items);
我试过维基百科和谷歌,但无法得出答案。任何语言的任何链接或算法或代码都会很棒。
答案 0 :(得分:1)
如果您可以在商品上找到订单,请对其进行排序。然后,找到相同的项目非常简单,因为它们将彼此相邻。
这只是O(n * Log(n))。
答案 1 :(得分:1)
要在数组中查找重复项,您可以对列表进行排序和扫描,在O(n log n)
中查找相邻的相同项目。
如果您只想输出重复项,并且内存不是问题,您可以保留已经看过的元素的哈希集,遍历数组,检查当前元素是否在您的集合中。如果是,则将其输出为重复,否则将其插入到集合中。那将是O(n)
答案 2 :(得分:1)
为什么不将每个项目添加到自平衡二叉树中,而不是排序然后比较相邻项目,因此您可以免费获得“已经存在”的检查(有点)。