• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

两个数组的交集(力扣刷题)

武飞扬头像
会飞的鱼-blog
帮助1

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

学新通

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/intersection-of-two-arrays
 

说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。

思路

        这道题目,主要要学会使用一种哈希数据结构:unordered_set,这个数据结构可以解决很多类似的问题。

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

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

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

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

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

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

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

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

思路如图所示:

学新通

 当然本题也有数组法,一样放在下面。

C 代码如下:

  1.  
    class Solution {
  2.  
    public:
  3.  
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
  4.  
    //set法
  5.  
     
  6.  
    // unordered_set<int> result_set;
  7.  
    // unordered_set<int> nums_set(nums1.begin(),nums1.end());
  8.  
     
  9.  
    // for(int num : nums2)
  10.  
    // {
  11.  
    // if(nums_set.find(num) != nums_set.end())
  12.  
    // {
  13.  
    // result_set.insert(num);
  14.  
    // }
  15.  
    // }
  16.  
     
  17.  
    // return vector<int>(result_set.begin(),result_set.end());
  18.  
     
  19.  
     
  20.  
     
  21.  
    //数组法
  22.  
    unordered_set<int> result_set;
  23.  
    int hash[1005] = {0};
  24.  
    for(int num : nums1)
  25.  
    {
  26.  
    hash[num] = 1;
  27.  
    }
  28.  
     
  29.  
    for(int num : nums2)
  30.  
    {
  31.  
    if(hash[num] == 1)
  32.  
    {
  33.  
    result_set.insert(num);
  34.  
    }
  35.  
    }
  36.  
     
  37.  
    return vector<int>(result_set.begin(),result_set.end());
  38.  
    }
  39.  
    };
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggihec
系列文章
更多 icon
同类精品
更多 icon
继续加载