首页 > 其他分享 >LeetCode349 两个数组的交集

LeetCode349 两个数组的交集

时间:2023-09-13 23:32:50浏览次数:50  
标签:LeetCode349 set 数组 交集 result 哈希 集合

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补充

标准代码的改进

标签:LeetCode349,set,数组,交集,result,哈希,集合
From: https://blog.51cto.com/u_15955938/7465590

相关文章

  • 数组(一)
    数组今日份学习为一维数组及二维数组的创建,初始化以及一些基础的使用。一维数组一维数组的创建分为两类:一是先声明,再用new关键字进行内存分配;先声明:数组元素类型数组名字[];【例】intstudent[];数组元素类型[]数组名字;【例】int[]student;(以上两种都是Java中对于数组的正......
  • 监听数组Array变化或Obj属性变化
    工作中经常会遇到监听数组发生变化时执行相应的回调触发逻辑,客户应用场景中需要实现对象变量的动态监听,当变量发生变化时触发回调函数,实现事件发送等应用场景。   通常由以下两种方式实现需求一.通过改变对象原型prototype方法实现回调监听//创建一个数组原型对象varar......
  • c 语言 数组(一维)做函数参数
    @TOC前言函数参数:函数参数是函数内外连接的接口,可以互通数据。一、传递一维数组函数调用时,实参是给形参初始化,所以,实参传递什么类型的数据,形参就以什么类型去接住。比如一维数组,如下:函数fun1传递a,因为数组名就是数组的首地址,所以用int*p形参。函数fun2传递&a,是一维数组......
  • 2023-09-13:用go语言,给定一个整数数组 nums 和一个正整数 k, 找出是否有可能把这个数组
    2023-09-13:用go语言,给定一个整数数组nums和一个正整数k,找出是否有可能把这个数组分成k个非空子集,其总和都相等。输入:nums=[4,3,2,3,5,2,1],k=4。输出:True。来自左程云。答案2023-09-13:第一种算法(canPartitionKSubsets1)使用动态规划的思想,具体过程如下:1.计算数组......
  • 2023-09-13:用go语言,给定一个整数数组 nums 和一个正整数 k, 找出是否有可能把这个数组
    2023-09-13:用go语言,给定一个整数数组nums和一个正整数k,找出是否有可能把这个数组分成k个非空子集,其总和都相等。输入:nums=[4,3,2,3,5,2,1],k=4。输出:True。来自左程云。答案2023-09-13:第一种算法(canPartitionKSubsets1)使用动态规划的思想,具体过程如下:1.......
  • Glang 数组的排序和查找:快速丶希尔丶堆丶选择丶冒泡...
    一.数组的排序与查找1//数组的排序和查找2functestArrSort(){3//内部排序:将需要处理的所有数据都加载到内部存储器中进行排序(交换式排序法、选择式排序法、插入式排序)45//交换式排序法-冒泡排序:递归将最大或最小值冒泡到数组尾6Bu......
  • 剑指offer面试题3:数组中重复的数字
    一、知识点:数组相关知识二、描述在一个长度为n的数组里的所有数字都在0~n-1范围内,数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道重复几次。请找出数组中任意一个重复的数字,例如:输入长度为7的数组[2,3,2,4,3,3,5],那么输出2或者3都是正确的,存在不合法的输入的话输出-1。......
  • Java比较两个数组内容是否相同
    数组内容相同   需求:设计一个方法,用于比较两个数组内容是否相同   思路:1.定义两个数组,分别使用静态初始化完成数组元素的初始化   定义一个方法,用于比较两个数组的内容是否相同   返回值类型:boolean   参数:int[]arr,int[]arr2   比较两个数组的内容是否相......
  • 树状数组--模板
    #include<stdio.h>#include<string.h>#defineN50050intn;intin[N];intLowbit(intt){ returnt&(-t);}intSum(intp){ intsum=0; while(p>0) { sum+=in[p]; p-=Lowbit(p); } returnsum;}voidplus(intp,intnum){ while(......
  • Leetcode 26. 删除有序数组中的重复项
    题目描述给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。双指针Python实现defremoveDuplicates(nums:List[int])->int:......