前言
刷题专栏到目前已经是第二十四篇了,欢迎大家来关注我的刷题专栏,一起来刷题。
今天的这道题,还是关于数组这个最常用的数据结构相关的题。
《两个数组的交集》这道题到底如何解出来,下面一起来看一下吧。
算法题:两个数组的交集
通过题目的描述来看,是要通过两个数组中,找出相交的元素。
这里面的相交的定义如何理解。
其实只需要找到数组1中包含数组2的元素即可,在一定程度上,数组1是可能包含数组2的。
但是在数组1不全部包含数组2的时候,只需要找到最好连续包含的元素即可。
那么代码要如何写呢,其实有这么几种方法是可以使用的。
比如移动的指针、遍历获取值,然后通过流去拿出结果值等等。
下面来看一下具体的代码展示吧。
代码展示
本次执行的代码如下,大家可以自行参考一下。
public class Solution { public static void main(String[] args) { Solution solution = new Solution(); System.out.println(Arrays.toString(solution.intersection(new int[]{1,2,2,1}, new int[]{2,2}))); } public int[] intersection(int[] nums1, int[] nums2) { List<Integer> resultList = new ArrayList<>(); Set<Integer> set = new HashSet<>(); for (int i : nums1) { set.add(i); } for (int i : nums2) { if (set.contains(i)) { set.remove(i); resultList.add(i); } } return resultList.stream().mapToInt(Integer::intValue).toArray(); } }
代码执行结果
代码执行实在是一个字,惨。
没想到这么差劲,估计是使用了steam流的关系。我看到有些大佬使用两行代码就解决了这个问题,就是使用的Stream流的方式。
有兴趣的话,大家可以去试一下。
总结
今天的这道题主要是针对多个数组之间的处理,如果追求性能的话,可以使用双指针的方式去处理,效果会好很多。