有没有办法比较两个arrayLists,看看它们中的任何一个在任何点都有相同的值?我知道我可以使用两个嵌套循环,但是我试图在log(n)时间内执行此操作,所以相反,我尝试的方法类似于如何在mergesort中合并两个列表,但是我不能真的弄清楚如何实现它。任何帮助将不胜感激!谢谢! 编辑:是的我的意思是nlog(n),而不是log(n),抱歉
答案 0 :(得分:1)
您无法在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
您不需要扫描列表中没有超出范围的索引,因为您只对相等的值感兴趣。
答案 1 :(得分:0)
如果要比较值是否在任何点相同(即列表1的索引1处的对象= =列表2的索引1处的对象),那么您只需循环遍历列表并进行比较(O(N))
如果您想知道它们是否有任何共同的值,请对它们进行排序并沿着列表向下走。 O(n log n),因为排序。
答案 2 :(得分:0)
如果两个列表的大小相同,那么
for(int i =0; i<listOne.size();i++) {
int index = listTwo.indexOf(listOne.get(i));
if(index !=-1) {
System.out.println("equal at listOne[" + i + "] and listTwo[" + index + "]");
}
}
答案 3 :(得分:0)
Heap怎么样?然后合并那堆。