如何在O(logn)时间内删除ArrayList中的重复元素

时间:2012-07-24 16:10:34

标签: java arraylist hashset

我在arraylist中有字符串作为元素,我想在O(logn)时间使用Java删除它们

我尝试使用HashSet复制并清除并复制回另一个arraylist,但我认为这是在O(n)时间。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

如果数组中的字符串按排序顺序排列,则可以使用二进制搜索在O(log n)时间访问它们;但是,如果它们未排序,则需要检查数组的每个元素,给出O(n)的下限。

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