如何在嵌套循环中的ArrayList中找到某些东西的位置?

时间:2014-10-24 18:00:19

标签: java arraylist

有没有办法比较两个arrayLists,看看它们中的任何一个在任何点都有相同的值?我知道我可以使用两个嵌套循环,但是我试图在log(n)时间内执行此操作,所以相反,我尝试的方法类似于如何在mergesort中合并两个列表,但是我不能真的弄清楚如何实现它。任何帮助将不胜感激!谢谢! 编辑:是的我的意思是nlog(n),而不是log(n),抱歉

4 个答案:

答案 0 :(得分:1)

您无法在O(log(n))中执行此操作。

您可以使用O(n*log(n))实现此操作,方法是首先对两个列表进行排序,然后逐个元素地进行比较(排序需要nlogn并比较n

你可以这样做:

  1. 创建用0

  2. 初始化的变量i, j
  3. 循环列表并将l1.get(i)l2.get(j)进行比较

  4. 3A。相等:递增i, j(并且可能记住元组)

    3B。 l1的元素小于l2的元素:仅增量i

    3c上。 l1的元素大于l2的元素:仅增量j

    1. 退出循环,如果一个索引超出范围
    2. 您不需要扫描列表中没有超出范围的索引,因为您只对相等的值感兴趣。

答案 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怎么样?然后合并那堆。