Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >算法篇:利用map求数组交集

算法篇:利用map求数组交集

作者头像
灰子学技术
发布于 2020-09-07 07:19:39
发布于 2020-09-07 07:19:39
72100
代码可运行
举报
文章被收录于专栏:灰子学技术灰子学技术
运行总次数:0
代码可运行

算法:

求数组的交集,利用map的key,value特性会比较简单,步骤如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1.先遍历数组1,然后将数组存到map1中
2.遍历数组2,将数组存入map2中,存的过程中需要判断是否存在与map1中,
根据题目要求做去重处理或者不去重处理。
3.将满足条件的元素放到新的数组里面。
(备注:如果是多个数组的话,可以两两求交集,然后依次递减,直到数组个数为1.

题目1: https://leetcode-cn.com/problems/intersection-of-two-arrays/

代码实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func intersection(nums1 []int, nums2 []int) []int {
    var numMap,numMap1 map[int]bool 
    var tar []int
    numMap =make(map[int]bool)
    numMap1 =make(map[int]bool)
    for _,i:=range nums1 { // 遍历数组1排除重复的数字
       if  _,v:=numMap[i];!v {
            numMap[i] = true
       }
    }
    for _,j:=range nums2 {
       if  _,v:=numMap1[j];!v { // 遍历数组2排除重复的数字
           if _,v1:=numMap[j];v1{ // 求数组1和数组2的交集
               numMap1[j] = true
                tar = append(tar,j)
           }
       }
    }
    return tar
}

执行结果:

题目2: https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/

代码实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func intersect(nums1 []int, nums2 []int) []int {
    if len(nums1) == 0 || len(nums2) == 0 {
        return nil
    }
    var tar []int
    nMap := make(map[int]int)
    for _,n := range nums1 {
        _, ok := nMap[n]
        if !ok {
            nMap[n] = 1
        } else {
            nMap[n]++
        }
    }
    for _, m := range nums2 {
        _, ok := nMap[m]
        if ok && nMap[m]>0{
            nMap[m]--
            tar = append(tar,m)
        }
    }
    return tar 
}

执行结果:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灰子学技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【算法千题案例】⚡️每日LeetCode打卡⚡️——52.两个数组的交集
---- 原题样例:两个数组的交集 给定两个数组,编写一个函数来计算它们的交集。 示例: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2: 输入:nu
呆呆敲代码的小Y
2021/10/15
4320
精选题详解之我们在何处相遇?
题目链接:https://leetcode-cn.com/problems/intersection-of-two-arrays/
公众号袁厨的算法小屋
2020/11/25
4120
Dimple在左耳听风ARTS打卡(二十三)
所谓ARTS:每周至少做一个LeetCode的算法题;阅读并点评至少一篇英文技术文章;学习至少一个技术技巧;分享一篇有观点和思考的技术文章。(也就是Algorithm、Review、Tip、Share 简称ARTS)这是第二十三期打卡。
程序员小跃
2019/12/27
3370
Dimple在左耳听风ARTS打卡(二十三)
LeetCode_349. 两个数组的交集
https://leetcode-cn.com/problems/intersection-of-two-arrays/
小小工匠
2021/08/17
2370
LeetCode 349. 两个数组的交集(哈希)
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/intersection-of-two-arrays 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Michael阿明
2020/07/13
3100
LeetCode 349. 两个数组的交集(哈希)
双指针,集合问题-LeetCode 344、345、347、349、350
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
算法工程师之路
2019/11/30
6010
每天一算:Intersection of Two Arrays II
leetcode上第350号问题:Intersection of Two Arrays II
五分钟学算法
2018/11/20
5010
LeetCode 350. 两个数组的交集 II(哈希)
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Michael阿明
2020/07/13
4180
LeetCode 350. 两个数组的交集 II(哈希)
力扣LeetCode,两个数组的交集 II
1、给定两个数组,编写一个函数来计算它们的交集。 示例 1: 1 输入: nums1 = [1,2,2,1], nums2 = [2,2] 2 输出: [2,2] 示例 2: 1 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 2 输出: [4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。 进阶: 如果给定的数组已经排好序呢?你将如何优化你的算法? 如果 nums1 的大小比 nums2 小很多,哪种方法更
别先生
2020/03/19
3540
LeetCode通关:哈希表六连,这个还真有点简单
就好像老三和老三的工位:有人来找老三,前台小姐姐一指,那个像狗窝一样的就是老三的工位。
三分恶
2021/08/13
3650
LeetCode通关:哈希表六连,这个还真有点简单
每日一练 —— set习题
https://leetcode.cn/problems/intersection-of-two-arrays/description/
迷迭所归处
2024/11/19
550
每日一练 —— set习题
两个数组的交集 II
输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。 我们可以不考虑输出结果的顺序。
_kyle
2021/01/05
1.3K0
两个数组的交集
比较常规的题目,计算两个数组的交集最简单的方式就是遍历数组nums1,对于其中的每个元素,遍历数组nums2判断该元素是否在数组nums2中,如果存在,则将该元素添加到返回值,这样的方式时间复杂度是O(mn),在这里使用排序加双指针的方式,首先对于两个数组分别进行排序,之后分别对于两个数组设立指针进行遍历,对比两个指针所指向的元素,较小的值的指针后移,如果相等则判断是否已经在目标数组中,不在则将其推入数组,之后同时将两个指针后移,最终返回目标数组即可。首先将两个数组分别从小到大进行排序,之后定义目标数组target,以及两个指针i、k与两个数组的长度n1、n2,定义循环,在两个指针分别小于其指向的目标数组的长度下执行循环,如果i指针指向的值小于k指针指向的值,将i指针后移,如果大于则将k指针后移,如果相等则首先得到目标数组的最后一个值的索引,当然在数组为空的情况下会得到-1,在Js中会取得undefined值,在下方比较时不会相等,之后比较最后一个值是否与此时指针指向的值相等,不相等则将值推入数组,这样用来进行去重操作,之后将两个指针分别后移,循环结束后返回目标数组即可。
WindRunnerMax
2022/05/06
1.5K0
349. 两个数组的交集
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/intersection-of-two-arrays 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
lucifer210
2019/09/09
9600
LeetCode 进阶之路 - 两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。 我们可以不考虑输出结果的顺序。 进阶: 如果给定的数组已经排好序呢?你将如何优化你的算法? 如果 nums1 的大小比 nums2 小很多,哪种方法更优? 如
Li_XiaoJin
2022/06/10
1710
【leetcode刷题】T44-两个数组的交集 II
Given two arrays, write a function to compute their intersection.
木又AI帮
2019/07/17
4530
LeetCode 349. 两个数组的交集
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2:
韩旭051
2022/05/09
2800
leetcode: explore-array-26 列表取交集 II
https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/26/
用户7685359
2020/08/21
4720
哈希——349. 两个数组的交集
示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]
向着百万年薪努力的小赵
2022/12/02
5080
两个数组的交集II
遍历nums1并使用一HashMap存储每个元素出现的次数,接着遍历nums2,若当前元素在在map中出现次数大于0,则说明当前元素为交集记录该元素,将map中该数次数减1。
你的益达
2020/08/05
1.2K0
相关推荐
【算法千题案例】⚡️每日LeetCode打卡⚡️——52.两个数组的交集
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验