有没有一种方法可以比较两个arrayLists,以查看它们中的任何一个在任何时候都具有相等的值?我知道我可以使用两个嵌套循环,但是我想在log(n)时间内执行此操作,因此,我尝试执行与在mergesort中合并两个列表的方法类似的操作,但是我不能弄清楚如何实现它。任何帮助将不胜感激!谢谢!
编辑:是的,我是说nlog(n),不是log(n),对不起
最佳答案
您不能在O(log(n))
中执行此操作。
您可以使用O(n*log(n))
来实现此目的,方法是先对两个列表进行排序,然后按元素进行比较(排序采用nlogn
并比较n
)
您可以这样做:
创建以0初始化的变量i, j
遍历列表并将l1.get(i)
与l2.get(j)
比较
3a。相等:同时增加两个i, j
(也许还可以记住元组)
3b。 l1的元素小于l2的元素:仅递增i
3c。 l1的元素大于l2的元素:仅递增j
退出循环(如果一个索引超出范围)
您不需要在列表中扫描不超出范围的索引,因为您只对相等的值感兴趣。