0
点赞
收藏
分享

微信扫一扫

LeetCode349 两个数组的交集

LeetCode349  两个数组的交集

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

学习内容

给两个数组,返回这两个数组的交集。如一个数组是22946,一个数组是1221,这两个数组的交集是2。

用数组来保存交集,可能会没有去重。交集为元素2就可以了。

这道题目用set来解决的一个比较好的题目。

用数组来做哈希比较合适。用数组来做哈希表解决了一个题目。用set来解决一个问题。遇到哈希表题目,什么时候用set,数组,map。

没有数值的限制,数值很大,想做哈希映射时,用数组就不合适了。会浪费很多存储空间。为啥会想到用哈希表的方式解决。

哈希表最擅长解决,给你一个元素,判断在这个集合是否出现过

具体是用set、map还是数组,具体情况分析。

数值不大,数值很分散,这种情况用set比较合适。

这个题目用set解决,一般使用哈希法时,判断这个元素在集合里出没出现过。求两个数组的交集。把第一个数组,number1,转化为哈希表。

给它放在哈希表里,把这里面的所有数值放在哈希表里,然后遍历number2,然后再在哈希表里去查,每一个元素是否在哈希表中出现过。如果出现过,最终放进result集合里。最终集合是去重的。

思路:number1处理,转化成哈希表的形式,来存numbers1里面的元素。然后再用numbers2的每一个元素,去查询在哈希表是否出现过,出现过则放入result的集合中。

选哈希结构,用set来进行解决。

先定义一个result集合,因为是要去重的。定义个set做result。

set result

再选择哈希表,也用unorderedset,number size。直接把numbers1做个初始化,转变为set里的存储结构。

set(nums1)

遍历nums2的set过程:

for(i=0;i<nums2.size;i++){
  if (numsset.find(nums2[i])!=numsset.find(c1))
  //如果找到了这个元素,放入集合
  result.insert(nums2[i])
  // 不去做去重操作
}
return vector(set)

数组解决法: 哈希表用数组。定义一个多大的哈希表就够了。定义一个数组1005,稍微大一点的哈希数组。

// 存放集合还是set
set result
// 把nums1遍历成数组
// 先定一一个哈希数组:1005
int hash[1005] = {0}
hash[nums1[i]]=1
// 哈希数组记录了nums1中所有出现过的元素
// 出现过的都是1。
// 遍历nums2
for(i=0;i<nums2.size;i++)
if(hash[nums2[i]]==1)
result.insert(nums2[i])
// result有个自然去重操作

代码

go补充

标准代码的改进

举报

相关推荐

0 条评论