在最近的一次采访中,有人问我这个问题。我没能在规定的时间内想出一个令人满意的答案。
给定N个包含整数的单链列表,找到公共元素或它们之间的交点,并返回仅包含公共元素的列表。
示例:
输入:
list1=[1,3,4,5,10,3]
list2=[1,2,4,8,7,2]
list3=[9,11,1,4]
输出:
列表=[1,4]
注意:请注意,不应考虑同一列表中的重复元素。
如果列表实现Collections框架的公共List
接口,则可以使用retainAll
方法实现:
List<Integer> list1 = Arrays.asList(1, 3, 4, 5, 10, 3);
List<Integer> list2 = Arrays.asList(1, 2, 4, 8, 7, 2);
List<Integer> list3 = Arrays.asList(9, 11, 1, 4);
List<Integer> result = new ArrayList<>(list1);
Stream.of(list2, list3).forEach(result::retainAll);
System.out.println(result);
输出:
[1, 4]
步骤1:维护哈希映射<Integer,Integer>List_Frequency,用于存储该元素所在列表的频率。
步骤2:遍历每个列表。当再次遍历时,保持另一个HashMap<Integer,Integer>访问以了解您是否是第一次访问列表中的元素。因此,它只会使HashMap List_Frequency增加一次。
第3步:遍历HashMap List_Frequency以了解哪些元素被访问了N次。