每日一题——349. 两个数组的交集

简介: 每日一题——349. 两个数组的交集

349. 两个数组的交集

力扣349

题意:给定两个数组,编写一个函数来计算它们的交集。

网络异常,图片无法展示
|

代码思路

注意题目特意说明:输出结果中的每个元素一定是唯一的,也就是说输出的结果的去重的, 同时可以不考虑输出结果的顺序

这道题用暴力的解法时间复杂度是O(n^2),那来看看使用哈希法进一步优化。

但是要注意,使用数组来做哈希的题目,是因为题目都限制了数值的大小。

而这道题目没有限制数值的大小,就无法使用数组来做哈希表了。

而且如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。

此时就要使用另一种结构体了,set ,关于set,C++ 给提供了如下三种可用的数据结构:

  • std::set
  • std::multiset
  • std::unordered_set

std::set和std::multiset底层实现都是红黑树,std::unordered_set的底层实现是哈希表, 使用unordered_set 读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set。

思路如图所示:

网络异常,图片无法展示
|

Java版本代码:

import java.util.Set;
class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {
            return new int[0];
        }
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> resSet = new HashSet<>();
        for (int i : nums1) {
            set1.add(i);
        }
        for (int i : nums2) {
            if (set1.contains(i)) {
                resSet.add(i);
            }
        }
        int[] resArr = new int[resSet.size()];
        int index = 0;
        for (int i : resSet) {
            resArr[index++] = i;
        }
        return resArr;
    }
}
复制代码

拓展

直接使用set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的。



目录
相关文章
|
9月前
|
C#
【力扣每日一题/02】349. 两个数组的交集
【力扣每日一题/02】349. 两个数组的交集
|
8月前
|
存储 算法
算法训练,牛客.判断是不是平衡二叉树 牛客.最大子矩阵两个数组的交集牛客.数组中两个字符串的最小距离
算法训练,牛客.判断是不是平衡二叉树 牛客.最大子矩阵两个数组的交集牛客.数组中两个字符串的最小距离
算法训练,牛客.判断是不是平衡二叉树 牛客.最大子矩阵两个数组的交集牛客.数组中两个字符串的最小距离
|
存储 算法 Go
算法练习第六天——两个数组的交集
给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。
|
4月前
|
存储
349 两个数组的交集、350 两个数组的交集、242 有效字母的异位词(2021-11-07)
349 两个数组的交集、350 两个数组的交集、242 有效字母的异位词(2021-11-07)
33 1
|
算法
重温算法之两个数组的交集
有时候看到很多题解都是使用现有的方法去实现,其实管它黑猫白猫,能解题就行了,我之前面试遇到算法题的第一印象是不会考虑现有方法的,比如list的排序,肯定不会考虑list.sort,所以有时候还是得学会变通,灵活运用。
134 0
重温算法之两个数组的交集
|
9月前
leetcode代码记录(两个数组的交集
leetcode代码记录(两个数组的交集
40 1
|
存储 算法
LeetCode 350. 两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集。
101 0

热门文章

最新文章