问题描述
是否可以使用弗洛伊德的乌龟和野兔算法以O(n)时间,O(1)空间复杂度从未排序的数组中删除重复项? 考虑数组[3,1,3,4,2]。删除重复项后,函数“ remove_dups”必须返回[3,2]。此外,该函数应在数组中的负整数上工作。
解决方法
是的,有可能。想法是将数组项视为链接列表节点。任何特定的索引都指向该索引处的值。
您将看到在重复的情况下存在循环,两个索引将具有相同的值,并且它们将形成一个循环,如下图所示。
示例:
1-> 2-> 3-> 4-> 5-> 6-> 3
所以我们可以在链表中找到循环的入口点,这将是我们的重复元素。
来源:https://www.geeksforgeeks.org/find-duplicates-constant-array-elements-0-n-1-o1-space/