[LeetCode]day17 349.两个数组的交集

https://leetcode.cn/problems/intersection-of-two-arrays/description/

题目描述

给定两个数组 nums1 和 nums2 ,返回它们的交集。
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序 。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的


题解

首先要注意审题 结果数组是去重的(可以从示例1看出)

解法一:暴力解法

最容易想到的就是使用双重循环遍历两个数组,发现有相同元素并且结果数组中没有重复的元素时,就加入结果数组中

class Solution {
public:
    vector intersection(vector& nums1, vector& nums2) {
        vectorre;
        for(int i=0;i

时间复杂度为 O ( n ) = n 2 O(n)=n^2 On=n2


解法二:使用哈希表

上一篇我们提到过,当需要查询一个数据是否存在于某个集合中时,要先想到使用哈希表

使用数组

由于这道题中,数组中的数据最大为1000,我们可以考虑使用数组
数组的下标对应了每一个数字

  • 用set来作为结果数组,因为set本身数据是不可重复的
  • 遍历nums1 比如说遍历到5 就将hash[5]改为1
  • 遍历nums2 比如说遍历到5 去查找hash[5]是否为1 如果为1,说明num2和nums1中都有这个数 如果并且re数组中没有5,就将它放入结果数组中
class Solution {
public:
    vector intersection(vector& nums1, vector& nums2) {
       unordered_setre;
       int hash[1001]={0};
     for(int i=0;i(re.begin(),re.end());
    }
};

使用set

如果数据更大一些,就可以考虑使用set 其中unordered_set查询效率比较高

class Solution {
public:
    vector intersection(vector& nums1, vector& nums2) {
       unordered_setre;
       unordered_sethash;
     for(int i=0;i(re.begin(),re.end());
    }
};

使用哈希表 时间复杂度 O ( n ) = m + n O(n)=m+n O(n)=m+n

你可能感兴趣的:(leetcode,哈希算法,算法)