刷题专栏(二十四):两个数组的交集

简介: 刷题专栏(二十四):两个数组的交集

前言

刷题专栏到目前已经是第二十四篇了,欢迎大家来关注我的刷题专栏,一起来刷题。

今天的这道题,还是关于数组这个最常用的数据结构相关的题。

《两个数组的交集》这道题到底如何解出来,下面一起来看一下吧。image.png

算法题:两个数组的交集

通过题目的描述来看,是要通过两个数组中,找出相交的元素。

这里面的相交的定义如何理解。

其实只需要找到数组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流的关系。image.png我看到有些大佬使用两行代码就解决了这个问题,就是使用的Stream流的方式。

有兴趣的话,大家可以去试一下。

总结

今天的这道题主要是针对多个数组之间的处理,如果追求性能的话,可以使用双指针的方式去处理,效果会好很多。

目录
相关文章
|
5月前
|
存储 移动开发 算法
技术笔记:pintia_L1_20题目集合
技术笔记:pintia_L1_20题目集合
32 0
|
6月前
|
算法
刷题专栏(三十):数组拆分 I
刷题专栏(三十):数组拆分 I
124 2
|
6月前
|
算法 Java
刷题专栏(二十九):重复的子字符串
刷题专栏(二十九):重复的子字符串
131 2
|
6月前
|
算法 Java
刷题专栏(二十五):有效的完全平方数
刷题专栏(二十五):有效的完全平方数
177 2
|
6月前
|
算法
刷题专栏(十五):各位相加
刷题专栏(十五):各位相加
53 0
|
6月前
|
算法
刷题专栏(二十二):3 的幂
刷题专栏(二十二):3 的幂
119 0
|
6月前
|
算法 Java
刷题专栏(二十三):4的幂
刷题专栏(二十三):4的幂
97 0
|
6月前
|
存储 机器学习/深度学习 算法
六六力扣刷题哈希表之三数之和
六六力扣刷题哈希表之三数之和
58 0
代码随想录算法训练营 | 数组小结
代码随想录算法训练营 | 数组小结
|
Cloud Native
【刷题日记】905. 按奇偶排序数组
本次刷题日记的第 46 篇,力扣题为:905. 按奇偶排序数组 ,简单