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

news/2024/7/10 1:31:09 标签: 算法, leetcode, 数据结构, vue, 动态规划

算法

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

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

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

代码实现:

func interp(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/interp-of-two-arrays-ii/

代码实现:

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 
}

执行结果:


http://www.niftyadmin.cn/n/873075.html

相关文章

分布式锁:一、基础知识

一、在讨论锁之前,我们需要先看下进程之间的两种主要关系,同步和互斥。互斥:是指散步在不同进程之间的若干程序片段,当某个进程运行其中一个程序片段时,其它进程就不能运行它 们之中的任一程序片段,只能等到…

函数变量的作用域和java语言有什么不同_Java变量, 常量和作用域

变量变量就是可以变化的量Java是一种强类型的语言, 每个变量都必须声明其类型Java变量是程序中最基本的存储单元, 其要素包括变量名, 变量类型和作用域.type varName [value] [{,varName[value]}];// 数据类型 变量名 值; 可以使用逗号来隔开声明多个同类型变量.注意事项每个变…

分布式锁:二、Redis锁

对于分布式锁的实现,除了redis锁之外,还有很多,像zookeeper,memcache,数据库,chubby等。redis锁因为使用简单,所以被大家广泛使用。本篇文章主要从以下几个方面来讲解redis锁:1.redi…

多态java参数有返回值_关于Java多态的总结.

[圣思源笔记]JAVA SE Lesson 11. 类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念。先有类,然后由类来生成对象(Object)。对象又叫做实例(Instance)。2. 类由两大部分构成:属性以及方法。属性一般用名词来表示&#…

公众号内容收集

公众号写了也有一年了,因为没有评论功能,只能点赞和赞赏,不能与大家互动,只能定期发起投票给大家,收集下大家的反馈~还请大家积极投票~公众号的几类文章目录:1. Go语言专题2. 结构相…

java lombok.getter_java lombok包在maven已经配置,但是getter setter不行

我这里写了Getter、Setter但是在创建User实例时,不能调用setName和getName,为什么Lombok 其原理就是在编译时自动生成代码。楼主配置了Maven。你通过mvn compile编译代码可以查看一下User.class中是否有生成get/set函数。如果楼主期望在idea中编码时编译…

一篇文章讲清楚乐观锁与悲观锁

一、概念介绍: 乐观锁(Optimistic Concurrency Control,缩写“OCC”),又叫做乐观并发控制,可以参考维基百科-乐观并发控制: (https://zh.wikipedia.org/wiki/%E4%B9%90%E8%A7%82%E5%B9%B6%E5…

算法篇:位运算异或的使用(一)

算法:在位运算中,运用最多的便是异或操作^,规则如下所示:1.a^a 0 ,a^0 a, 2.a^b^a a^a^b 0^b b 备注:下面的两个题目是单纯使用异或操作的题目,一种是最基本的异或操作, 一种是稍…