【问题标题】:Is it possible to remove duplicates from an unsorted array in O(n) time, O(1) space complexity, using the Floyd's tortoise and hare algorithm?是否可以使用 Floyd 的龟兔算法在 O(n) 时间、O(1) 空间复杂度内从未排序的数组中删除重复项?
【发布时间】:2020-11-30 20:11:30
【问题描述】:

是否可以使用 Floyd 的龟兔算法在 O(n) 时间、O(1) 空间复杂度内从未排序的数组中删除重复项? 考虑数组 [3,1,3,4,2]。删除重复项后,函数“remove_dups”必须返回 [3,1,4,2]。此外,该函数应该对数组中的负整数起作用。

【问题讨论】:

    标签: arrays duplicates in-place array-algorithms floyd-cycle-finding


    【解决方案1】:

    是的,这是可能的。这个想法是将数组项视为链表节点。任何特定索引都指向该索引处的值。

    你会看到重复的情况下存在循环,两个索引将具有相同的值,它们将形成一个循环,如下图所示。

    例子:

    1->2->3->4->5->6->3

    所以我们可以在链表中找到循环的入口点,这就是我们的重复元素。

    来源:https://www.geeksforgeeks.org/find-duplicates-constant-array-elements-0-n-1-o1-space/

    【讨论】:

    • 是的,我知道可以“找到”重复的元素。但我的疑问是我们是否可以就地删除这些重复项或不使用额外空间。就像如果数组是 [ -1, -2, 1, -1, 2] 那么函数必须返回 [-1, -2, 1, 2]
    • 如果你能找到你可以删除其中一个元素,但是数组的问题是它是连续的内存,所以即使你删除了元素,内存位置也不能被释放。
    猜你喜欢
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2012-07-12
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多