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

数据结构和算法—如何快速求组两个数组的交集

如何快速求两个数组的交集?

现有数组A、B ,数组长度分别为M、N,并且都是未排序的,如何快速两个数组的交集


说明:对于求数据交集的问题,那么每一个数组中可能会有重复元素,但是重复元素对求交集其实没有太大意义。

思路一:

              采用一个set 去存储一个数组,假定为A,然后用再从set中逐个查找B的元素。查到了就放入交集数组。

              当然采用哈希(hash_set)的的方式也能达到同样的效果。

              说明: 在STL中,set是以红黑树(RB-tree)作为底层数据结构,在时间复杂度为O(logN)情况下插入、删除和查找数据,hash_set操作的时间复杂度则比较复杂,这                 取决于哈希函数和哈希表的负载情况。一般来说,查询的数据量越大,hash_set的性能优势越明显。

              时间复杂度:O(Mlog(n))

             空间复杂度:o(min(M,N))


思路二:

             去长度小的数组A排序,对大数组B,直接用二分查找。

             时间复杂度:O(mlog(n))

              

思路三:(受限方法)

            如果知道元素上限为MaxElem,那么可以用bitset,对两个数组建立两个bitset,然后将两个bitset求与,得到的就是两个数组的交集。

            时间复杂度为O(m+n),空间复杂度为(MaxElem/8)。

            缺点:很明显,如果A只有两个元素(1,INT_MAX)那么这个方法就太糟糕了。

        

相关文章:

  • 利用jquery load 局部刷新数据
  • linux 下 ethtool 修改网卡eeprom
  • 五脏排毒最简单有效的方法
  • 用Jquery给Table 的TD TR绑定事件
  • Linux 内核中双向链表及list.h 文件分析
  • 提升ArcGIS Server for Java的REST访问切片图效率
  • 转转带你玩转企业虚拟化
  • 数据结构与算法[LeetCode]—3Sum 求数组中和为0 的三个数的组合
  • 摩尔庄园为啥这么火?
  • [LeetCode]—Rotate Image 矩阵90度翻转
  • “国家使命”图书第一批权威发布
  • Windows 7 ship party
  • LeetCode]—Rotate List 循环右移链表
  • 推荐阅读:太极拳的奥妙-专访七十肖维佳老翁现场展示
  • 一个真实的项目经历,很多东西大家可以借鉴下
  • [译] 怎样写一个基础的编译器
  • 2019年如何成为全栈工程师?
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • ES10 特性的完整指南
  • HashMap剖析之内部结构
  • JavaScript DOM 10 - 滚动
  • js数组之filter
  • ng6--错误信息小结(持续更新)
  • Python - 闭包Closure
  • storm drpc实例
  • VuePress 静态网站生成
  • 判断客户端类型,Android,iOS,PC
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端自动化解决方案
  • 区块链技术特点之去中心化特性
  • 山寨一个 Promise
  • 用mpvue开发微信小程序
  • 大数据全解:定义、价值及挑战
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ${ }的特别功能
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (转)setTimeout 和 setInterval 的区别
  • (转)VC++中ondraw在什么时候调用的
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 发送邮件
  • .net反编译的九款神器
  • .NET学习教程二——.net基础定义+VS常用设置
  • @RequestBody的使用