【问题标题】:how do i remove duplicate elements in ArrayList in O(logn) time如何在 O(logn) 时间内删除 ArrayList 中的重复元素
【发布时间】:2012-07-24 16:10:34
【问题描述】:

我将字符串作为数组列表中的元素,我想使用 Java 在 O(logn) 时间内删除它们

我曾尝试使用HashSet 复制和清除并复制回另一个数组列表,但我认为那是在 O(n) 时间内。

【问题讨论】:

标签: java arraylist hashset


【解决方案1】:

我认为这是不可能的,即使您对数组进行了排序,它也需要O(n)。我认为你不能避免至少检查每个元素一次,所以复杂度不可能低于O(n)

【讨论】:

  • 如果数组已排序,那么有可能在 O(log n) 中找到特定元素。
  • @Daniel 当然,但无法删除重复项。
  • 是的。我错过了问题的那一部分。
【解决方案2】:

如果你的数组中的字符串是有序的,你可以使用二分查找在 O(log n) 时间内访问它们;但是,如果它们未排序,则需要检查数组的每个元素,给出 O(n) 的下限。

编辑: 如果您尝试从已创建的 ArrayList 中删除重复项,则必须查看每个元素,这将花费 O(n) 时间。如果您愿意牺牲添加,您可以将它们按排序顺序添加到数组中,然后您将永远不必删除重复项,因为如果一个元素已经存在,那么您就不要添加它;但添加将在线性时间而不是恒定时间内运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多