【发布时间】:2012-07-24 16:10:34
【问题描述】:
我将字符串作为数组列表中的元素,我想使用 Java 在 O(logn) 时间内删除它们
我曾尝试使用HashSet 复制和清除并复制回另一个数组列表,但我认为那是在 O(n) 时间内。
【问题讨论】:
-
我猜你需要至少查看每个元素一次,设置 O(n) 的下限
我将字符串作为数组列表中的元素,我想使用 Java 在 O(logn) 时间内删除它们
我曾尝试使用HashSet 复制和清除并复制回另一个数组列表,但我认为那是在 O(n) 时间内。
【问题讨论】:
我认为这是不可能的,即使您对数组进行了排序,它也需要O(n)。我认为你不能避免至少检查每个元素一次,所以复杂度不可能低于O(n)。
【讨论】:
如果你的数组中的字符串是有序的,你可以使用二分查找在 O(log n) 时间内访问它们;但是,如果它们未排序,则需要检查数组的每个元素,给出 O(n) 的下限。
编辑: 如果您尝试从已创建的 ArrayList 中删除重复项,则必须查看每个元素,这将花费 O(n) 时间。如果您愿意牺牲添加,您可以将它们按排序顺序添加到数组中,然后您将永远不必删除重复项,因为如果一个元素已经存在,那么您就不要添加它;但添加将在线性时间而不是恒定时间内运行。
【讨论】: