首页 > 其他分享 >LeetCode 349. 两个数组的交集

LeetCode 349. 两个数组的交集

时间:2023-05-07 17:55:08浏览次数:45  
标签:set 交集 res nums1 349 int 数组 LeetCode nums2

题目链接:LeetCode 349. 两个数组的交集

题意:

本题题意是让我们找出两个数组中的交集,注意交集中不能出现重复元素

解题思路:

思路比较常规,先遍历数组num1,对于每个首次出现的数字,对应位置上的数值 +1,
再遍历数组num2,判断当前数字是否在num1中出现,如果出现,就加入到结果集中

完整代码如下:

func intersection(nums1 []int, nums2 []int) []int {
    //先遍历数组num1,记录每个数组的出现,就 +1
    // 再遍历数组num2,判断当前数字是否在num1中出现,如果出现,就加入到结果集中

    var res []int
    record:=make([]int,1000)
    for i,_:=range nums1{
        if record[nums1[i]] == 0{   //如果当前数字之前没有出现过,则进行一次记录,否则就不进行重复的记录
            record[nums1[i]]++
        } 
    }
    for i,_ :=range nums2{
        if record[nums2[i]] > 0{
            res = append(res,nums2[i])
            record[nums2[i]]--   //表示该数字已经放在结果集中了,
        }
    }
    return res
}

同时也可以使用map来进行标记每个数字是否出现过,

代码如下:

func intersection(nums1 []int, nums2 []int) []int {
    set:=make(map[int]struct{},0)  // 用map模拟set
    res:=make([]int,0)
    for _,v:=range nums1{
        if _,ok:=set[v];!ok{
            set[v]=struct{}{}
        }
    }
    for _,v:=range nums2{
        //如果存在于上一个数组中,则加入结果集,并清空该set值
        if _,ok:=set[v];ok{
            res=append(res,v)
            delete(set, v)
        }
    }
    return res
}

标签:set,交集,res,nums1,349,int,数组,LeetCode,nums2
From: https://www.cnblogs.com/lxing-go/p/17379690.html

相关文章

  • LeetCode 242. 有效的字母异位词
    题目链接:LeetCode242.有效的字母异位词题意:本题是要判断两个字符串s和t,是否是字母异位词,所谓字母异位次就是如果s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。解题思路:首先我们很容易想到,最简单的思路就是先遍历一遍s字符串,统计出每个字母出现的次数......
  • Leetcode11~20题整理
    11.盛最多水的容器比较暴力的做法:classSolution{public:intmaxArea(vector<int>&h){vector<int>t;intn=h.size();intres=-1;for(inti=0;i<n;i++){for(intj=0;j<(int)t.size(......
  • LeetCode 134.加油站
    1.题目:在一条环路上有n 个加油站,其中第i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组gas和cost,如果你可以绕环路行驶一周,则返回......
  • 【二分查找】LeetCode 33. 搜索旋转排序数组思路
    题目链接33.搜索旋转排序数组思路思路都在注释里代码classSolution{publicintsearch(int[]nums,inttarget){intlen=nums.length;if(len==0){return-1;}intleft=0,right=len-1;//1.......
  • 【二分查找】LeetCode 528. 按权重随机选择
    题目链接528.按权重随机选择思路代码classSolution{privateint[]sum;publicSolution(int[]w){sum=newint[w.length+1];for(inti=1;i<sum.length;i++){sum[i]=sum[i-1]+w[i-1];}}p......
  • 【二分查找】LeetCode 69. x 的平方根
    题目链接69.x的平方根思路基本思路是在区间\([1,x/2]\)中使用二分查找(因为平方根必然小于\(x/2\)),只不过需要注意一些细节。因为使用的是闭区间查找,所以判断循环终止的条件为\(left\leqright\)。为了防止溢出,使用mid=(right-left)/2+left和mid==x/mi......
  • 【二分查找】LeetCode 540. 有序数组中的单一元素
    题目链接540.有序数组中的单一元素思路假如不存在单个的元素,那么在奇数位置上总是成对元素的第一个元素,偶数位置上总是成对元素的第二个元素,但是如果加入了单个元素呢?我们可以看到在单个元素的左边这个特点没有变化,但是在单个元素的右边,奇数位置上总是成对元素的第二个元素,偶......
  • LeetCode 24. 两两交换链表中的节点
    题目链接:LeetCode24.两两交换链表中的节点本题不涉及算法,直接模拟就可以了,但是模拟的过程中,最好进行画图演示,不然容易出错。想要达到两两交换链表中节点的效果,就需要按照以下三个步骤进行。同时为了将头结点和非头结点统一处理,因此新建一个虚拟头结点,初始时,cur指向虚拟头结......
  • LeetCode 周赛 343(2023/04/30)结合「下一个排列」的贪心构造问题
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。大家好,我是小彭。今天是五一假期的第二天,打周赛的人数比前一天的双周赛多了,难道大家都只玩一天吗?这场周赛是LeetCode第343场单周赛,如果不考虑第一题摆烂的翻译,整体题目质量还是很不错哒。往期回顾:L......
  • LeetCode刷题记录|LeetCode热题100|226.翻转二叉树(easy)
    题目描述:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。 思路与算法:从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点root的左右两棵子树都已经翻转,只需交换两棵子树的位置,即可完成以root为根节点的整棵子树的翻转。时间复......