【问题标题】:How remove duplicated elements on a single-linked list with O(n) time and O(1) space?如何删除具有 O(n) 时间和 O(1) 空间的单链表上的重复元素?
【发布时间】:2013-08-19 15:47:55
【问题描述】:

如何在 O(n) 时间和 O(1) 空间的单链表上删除重复元素?

元素可以是任意字符、数字,且不排序。

例如,给定 8 --> 6 --> 7 --> 6 --> 5

返回 8 --> 6 --> 7 --> 5

O(1) 空间似乎很难?

【问题讨论】:

    标签: list duplicates singly-linked-list


    【解决方案1】:

    你不能因为你不能在复杂度小于 O(logn) 的列表中搜索......我们必须在删除之前搜索重复项不是吗?然后对于每个元素,你必须做同样的事情,所以它将是 O(nlogn)。这个列表有什么特殊之处,那么可以使用替代逻辑。指定有没有?

    【讨论】:

    • 没有其他特价商品。谢谢!
    【解决方案2】:

    有几种不同的方法可以做到这一点:

    1. 遍历链表并建立一个哈希表来存储数据及其频率。在遍历的过程中,如果遇到频率值 > 1,可以从列表中移除对应的节点。由于使用了哈希表,这将给出 O(n) 时间但 O(n) 空间。

    2. 在解决方案 1 中降低 O(n) 空间复杂度的一种方法是:如果您知道输入元素的范围,则可以使用固定大小的数组而不是哈希表。这将使其成为 O(n) 时间和 O(1) 空间。

    3. 这是通过重复遍历链表但不使用任何额外内存的方式在时间上包含 o(n2) 可以实现的。

    由于假设输入数组未排序,因此没有额外的内存就无法做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-24
      • 2015-05-25
      • 1970-01-01
      • 2012-01-02
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多