如何在不实际浏览两个列表中的每个元素的情况下找到两个列表中的公共元素?我的意思是不使用通常的遍历方法,我们倾向于将一个元素与整个列表进行比较。
其他详情:
1.列表已分类
2.想通过在第二个列表中遍历最少数量的元素来找到公共元素
答案 0 :(得分:3)
List<Integer> list1 = new ArrayList<Integer>();
List<Integer> list2= new ArrayList<Integer>();
List<Integer> list3 = new ArrayList<Integer>(list2);
list3.retainAll(list1);
list3
只有list1
和list2
的共同元素。
这只是一个优化的库方法,显然遍历了列表。
答案 1 :(得分:2)
注意:它会在封面下移动,你不能没有遍历
答案 2 :(得分:1)
我假设你的意思是你不想完全遍历第一个列表中每个元素的第二个列表。
一种方法是对两个列表进行排序,然后同时读取它们,推进或其他迭代器的不匹配以及匹配。
另一种方法是对一个列表进行排序,然后对另一个列表中的每个元素进行二进制搜索。
答案 3 :(得分:0)
您似乎要求O(n)解决方案,而不是在外部和内部循环中遍历列表的天真O(n ^ 2)解决方案。
一种方法是遍历其中一个列表并将其元素放在哈希表中。然后,遍历另一个列表,并为每个元素检查哈希表中是否存在该元素。这将是一个O(n)解决方案,但当然会占用空间。