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

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

前言

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

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

《两个数组的交集》这道题到底如何解出来,下面一起来看一下吧。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流的方式。

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

总结

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

目录
相关文章
|
8月前
|
C++
【一刷《剑指Offer》】面试题 3:二维数组中的查找
【一刷《剑指Offer》】面试题 3:二维数组中的查找
|
8月前
|
存储 算法 语音技术
【数据结构与算法】力扣刷题记之 稀疏数组
【数据结构与算法】力扣刷题记之 稀疏数组
|
8月前
|
算法
刷题专栏(三十):数组拆分 I
刷题专栏(三十):数组拆分 I
130 2
|
8月前
|
算法 Java
刷题专栏(二十九):重复的子字符串
刷题专栏(二十九):重复的子字符串
139 2
|
存储 算法 Serverless
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
75 0
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
|
8月前
|
算法
刷题专栏(十五):各位相加
刷题专栏(十五):各位相加
58 0
|
8月前
|
算法
刷题专栏(二十二):3 的幂
刷题专栏(二十二):3 的幂
128 0
|
8月前
|
算法 Java
刷题专栏(二十三):4的幂
刷题专栏(二十三):4的幂
103 0
|
8月前
|
算法
刷题专栏(十六):丑数
刷题专栏(十六):丑数
65 0
|
8月前
|
算法
【408数据结构与算法】—折半插入排序(十六)
【408数据结构与算法】—折半插入排序(十六)