当前位置: 首页 > news >正文

可视化图解算法66:两个数组的交集

1.题目

描述

给定两个数组 nums1nums2 ,返回 它们的交集。

输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

提示:

  • 1 <= nums1.length, nums2.length <= 1000

  • 0 <= nums1[i], nums2[i] <= 1000

2. 题解思路

对于数组nums1nums2 求交集,题目要求每个元素唯一,因此考虑使用set。题目也给出了不考虑输出结果的顺序。

具体思路是:

  1. 定义一个set;

  2. 将数组nums1中的内容添加到set中(去重);

  3. 遍历数组nums2,如果元素在set中,则将元素添加到结果集中,同时在set中删除该元素(相同 的元素在结果集中只需有一个);

  4. 返回结果集。

如果文字描述的不太清楚,你可以参考视频的详细讲解。

  • Python版本:https://www.bilibili.com/cheese/play/ep1374985https://www.bilibili.com/cheese/play/ep1374985

  • Java版本:https://www.bilibili.com/cheese/play/ep1368275https://www.bilibili.com/cheese/play/ep1368275

  • Golang版本:https://www.bilibili.com/cheese/play/ep1368659https://www.bilibili.com/cheese/play/ep1368659

3.编码实现

核心代码如下:

func intersection(nums1 []int, nums2 []int) []int {result := make([]int, 0)//1.定义一个setmySet := &Set{}//2.将数组nums1中的内容添加到set中for i := 0; i < len(nums1); i++ {mySet.add(nums1[i])}//3.遍历数组nums2,如果元素在set中,则将元素添加到结果集中,同时在set中删除该元素(相同的元素在结果集中只需有一个)for j := 0; j < len(nums2); j++ {if mySet.contains(nums2[j]) {result = append(result, nums2[j])mySet.remove(nums2[j])}}//4.返回结果集return result
}type Set map[int]struct{}func (s Set) add(v int) {s[v] = struct{}{}
}
func (s Set) remove(v int) {delete(s, v)
}
func (s Set) contains(v int) bool {if _, ok := s[v]; ok {return true}return false
}
func (s Set) size() int {return len(s)
}

具体完整代码你可以参考下面视频的详细讲解。

  • Python版本:https://www.bilibili.com/cheese/play/ep1374985https://www.bilibili.com/cheese/play/ep1374985

  • Java版本:https://www.bilibili.com/cheese/play/ep1368275https://www.bilibili.com/cheese/play/ep1368275

  • Golang版本:https://www.bilibili.com/cheese/play/ep1368659https://www.bilibili.com/cheese/play/ep1368659

4.总结

本题的关键是理解题目要求的每个元素唯一,因此需要想到用set来求交集(即将第一个数组中的元素添加到set中,之后遍历第二个数组中的元素是否也在set中)。

技巧:遍历数组nums2,如果元素在set中,则将元素添加到结果集中,同时在set中删除该元素,因为相同的元素在结果集中只需有一个。


《数据结构与算法》深度精讲课程正式上线啦!7 大核心算法模块全解析:

  ✅   链表

  ✅   二叉树

  ✅   二分查找、排序

  ✅   堆、栈、队列

  ✅   回溯算法

  ✅   哈希算法

  ✅   动态规划

无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!

  • Python编码实现:https://www.bilibili.com/cheese/play/ss897667807https://www.bilibili.com/cheese/play/ss897667807

  • Java编码实现:https://www.bilibili.com/cheese/play/ss161443488https://www.bilibili.com/cheese/play/ss161443488

  • Golang编码实现:https://www.bilibili.com/cheese/play/ss63997https://www.bilibili.com/cheese/play/ss63997

对于LeetCode数据结构与算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:清水出芙蓉,天然去雕饰。

http://www.dtcms.com/a/548991.html

相关文章:

  • 7 种方法:如何将视频从电脑传输到安卓手机
  • Qt GridLayout布局详解:从基础到高级技巧
  • BTreeMap 的 B-Tree 之心:性能与安全的 Rust 式演绎
  • 中国查公司的网站长沙 网站设计 公司
  • R 因子:深度解析其在统计学中的重要作用
  • Laravel 结合影刀 RPA 实现企业微信自动询单报价流程
  • Rust 入门之Rust 运算符全面解析:从基础到实战
  • Rust:借用 切片
  • 【Blender工具】
  • Spring Al学习6:嵌入模型 API
  • 坪山区住房和建设局网站wordpress能放视频
  • 网站承建商有哪些注册了一个域名怎么做网站
  • 我公司是帮企业做网站的_现在要帮客户们的网站备案微信公众营销平台开发
  • MPC模型预测控制:原理、设计与MATLAB实现
  • JavaEE初阶,网络编程篇
  • 基于中值滤波和高斯平滑的三维点云数据滤波matlab仿真
  • Java设计模式应用--装饰器模式
  • 【MATLAB例程】基于梯度检测自适应的互补滤波 vs 标准互补滤波,附MATLAB代码下载链接,可直接运行,方便学习和修改成自己想要的程序
  • 在检验铸铁平台精度使用三研法检验有哪些好处
  • 用Blender制作室内效果图宜居之地
  • blender4.5 使用外部IDE(pycharm)编辑脚本(bpy)实践指南
  • 计算机的一点基础知识
  • 广州网站建设 乐云seo国外优秀论文网站
  • CSS 图像拼合技术
  • 【C++】模板进阶 | 继承
  • 排名优化网站建设长沙网站建设优化
  • 厦门网站优化服务pyhton做网站
  • 论文阅读笔记——数据增强
  • 如何裁剪YOLOv8m的大目标检测头并验证其结构
  • 扩展阅读:目标检测(Object Detection)标注