该题目来自58同城的二面,用最快速度求两个数组之交集算法。

比如A={6,2,4,1},B={2,9,4,3},那么A&B={2,4}。

算法一:在大多数情况,也就是一般的情况下,大家都能想出最暴力的解法,通常也就是采用遍历或者枚举的办法来解决问题。

该题需要找出两个数组的交集,最简单的一个办法就是用A数组里面的所有数去匹配B数组里面的数。假设两个数组的大小都是n,那么这种遍历的时间复杂度为O(n^2)。这个也是最复杂的情况了。

算法二:通常下,除了用暴力枚举的问题,还有另外一种外万金油的解法----预处理。其实思想和C语言中的预处理一样,对数据记性归一化处理。说白了,在这里就是对数组排序。我们知道数组排序的算法时间复杂度最低是O(nlogn),可以看到数量级已经低于算法一的时间复杂度。

那么在排好序好,怎么得到数组的交集呢?

假设我们已经有了两个排好序的数组:

A={1,2,4,6}
B={2,3,4,9}

那么我们只要分别对A和B设置两个指针i,j(或者直接说是下标),进行循环,伪代码如下:

int count()
{
total=i=j=0;

while(i<n && j<n)

{

if(a[i]<b[j]) i++;

else if(a[i]>b[j])j++

else
total++;
}

return total;

}

时间复杂度为O(n)

综合排序的时间复杂度则整体复杂度为:O(nlogn)

算法三:如果只是会了上面两种,还只能说是计算机的菜鸟,而且一般面试或者笔试题也不会这么简单。那么比O(nlogn)时间复杂度更低的是多少呢?一般就是O(n)。我们可以思考一下计数排序的算法。也就是把两个数组A和B都遍历到一个新的数组里,然后在统计重复的数字即可,这个时间复杂度就是O(n)。当然,计数排序是有条件的,也就是要求数组内数字的范围是已知并且不是很大。

算法四:上面的算法实现简单,也很容易达到题目的要求,但是还是有一些瑕疵,也就是非完美方案,同样根据算法三我们可以想出用哈希函数或者哈希表来解决问题。也就是将数组A哈希到哈希表中,然后继续将数组B哈希到哈希表中,如果发生哈希碰撞则统计加1,最后可以得出数组的交集。时间复杂度也就是哈希所有元素的复杂度O(n)。

(在JAVA中可以使用HashMap)

文章来自IT部落格(www.itbuluoge.com)

最快速度求两个数组之交集算法相关推荐

  1. 最快速度求两个数组之交集算法与hash

    一个题目 该题目来自58同城的二面,用最快速度求两个数组之交集算法. 比如A={6,2,4,1},B={2,9,4,3},那么A&B={2,4}. 算法一:在大多数情况,也就是一般的情况下,大 ...

  2. Java求两个数组的交集、差集、并集

    目录 Java求两个数组的并集,代码如下: Java求两个数组的交集,代码如下: Java求两个数组的差集,代码如下: 交集.差集.并集测试代码如下: Java求两个数组的并集,代码如下: /*** ...

  3. php 两个数组求交集_如何求两个数组的交集

    题目描述 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2] 示例 2: 输入:nums1 = [4,9,5] ...

  4. 求两个数组的交集和并集

    晚上闲来无事,想起前两天查资料时候,看到别人一篇博客标题关于数组的交集和并集,晚上也随便写写,权当督促自己坚持经常练习练习写写小Demo.如下,先来一段求有序数组的交集的代码,代码如下: public ...

  5. js寻找两个数组的差集_js求两个数组的交集|并集|差集|去重

    let a = [1,2,3], b= [2, 4, 5]; 1.差集 (a-b 差集:属于a但不属于b的集合)  a-b = [1,3] (b-a 差集:属于b但不属于a的集合)  b-a = [4 ...

  6. PHP求两个数据的交集,php计算两数组交集两个函数_PHP教程

    ,使用 array_intersect 求两个数组的交集比使用 array_diff 求同样两个数组的并集要快. 如果要求数组 $a 与数组 $b 的差集的个数,应该使用 count($a) - co ...

  7. 使用Set求两个数组的并集|| 交集||差集

    这里要讲解一下,使用Set求两个数组的并集|| 交集||差集. 先定义两个数组: let a = new Set([1, 2, 3]);let b = new Set([4, 3, 2]); 并集 l ...

  8. PHP实现求两个数组的并集

    $thiscates = explode(",", $iddata['cates']) ; $getcates = $_GPC['cates']; $allcates = arra ...

  9. 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)

    目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...

最新文章

  1. 食堂就餐刷卡系统源码_智慧食堂重新定义你的食堂管理系统
  2. PHP中include和require
  3. 802.1X学习笔记
  4. Poj 2284 That Nice Euler Circuit
  5. 计算机考研计组简答题复习-本篇长期更新
  6. nssl1468-V【状压,数学期望,dfs】
  7. 国内开源项目无法形成气候且难以持续性的问题分析
  8. Strust2初之体验
  9. jsonobject修改key的值_JSONObject(org.json)的一点修改
  10. 定位导航方案在特殊环境下的适用说明
  11. python按键盘上哪个键运行_python按什么键运行
  12. win11休眠选项在哪 Windows11没有休眠选项的解决方法
  13. 移动跨平台框架React Native 基础教程【01】
  14. 【专项研究】支付宝会员积分体系
  15. 数据可视化之美-动态图绘制【补充】(以Python为工具)
  16. 爱快iKuai 安装成功后运行提示程序运行中解决办法
  17. 【专利转让】掌纹识别、图像复原、人脸检测定位相关领域
  18. 【IDEA】单独运行一个类的方法
  19. 安装包制作工具NSIS (NullSoft Scriptable Install System)
  20. Linux:ls命令

热门文章

  1. 几乎全面的食品英文总结 (吃遍英文单词)
  2. python中del和pop有什么区别_Python列表删除元素del、pop()和remove()的区别小结
  3. 如何只更新datetime类型字段中的日期
  4. 年度十大卫星图像排行榜
  5. java idle耗时_chrome中性能分析工具分析页面中Idle(空闲时间)占用太长时间,会不会影响页面性能,如果会是什么原因造成的?...
  6. 简单的出身年月实现 2018.9.29
  7. 无人驾驶特斯拉如何布局?
  8. 美食网站php模板,红色大气美食餐饮网站模板
  9. DEKRA德凯新设立首席数字官、首席运营官,任命两位新成员加入董事会
  10. LiveGBS国标流媒体GB28181微信无插件直播如何实现跨域鉴权