最快速度求两个数组之交集算法
该题目来自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和B设置两个指针i,j(或者直接说是下标),进行循环,伪代码如下:
total=i=j=0;while(i<n && j<n)
{if(a[i]<b[j]) i++;
else if(a[i]>b[j])j++
elsetotal++;}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)
最快速度求两个数组之交集算法相关推荐
- 最快速度求两个数组之交集算法与hash
一个题目 该题目来自58同城的二面,用最快速度求两个数组之交集算法. 比如A={6,2,4,1},B={2,9,4,3},那么A&B={2,4}. 算法一:在大多数情况,也就是一般的情况下,大 ...
- Java求两个数组的交集、差集、并集
目录 Java求两个数组的并集,代码如下: Java求两个数组的交集,代码如下: Java求两个数组的差集,代码如下: 交集.差集.并集测试代码如下: Java求两个数组的并集,代码如下: /*** ...
- php 两个数组求交集_如何求两个数组的交集
题目描述 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2] 示例 2: 输入:nums1 = [4,9,5] ...
- 求两个数组的交集和并集
晚上闲来无事,想起前两天查资料时候,看到别人一篇博客标题关于数组的交集和并集,晚上也随便写写,权当督促自己坚持经常练习练习写写小Demo.如下,先来一段求有序数组的交集的代码,代码如下: public ...
- 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 ...
- PHP求两个数据的交集,php计算两数组交集两个函数_PHP教程
,使用 array_intersect 求两个数组的交集比使用 array_diff 求同样两个数组的并集要快. 如果要求数组 $a 与数组 $b 的差集的个数,应该使用 count($a) - co ...
- 使用Set求两个数组的并集|| 交集||差集
这里要讲解一下,使用Set求两个数组的并集|| 交集||差集. 先定义两个数组: let a = new Set([1, 2, 3]);let b = new Set([4, 3, 2]); 并集 l ...
- PHP实现求两个数组的并集
$thiscates = explode(",", $iddata['cates']) ; $getcates = $_GPC['cates']; $allcates = arra ...
- 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)
目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...
最新文章
- 食堂就餐刷卡系统源码_智慧食堂重新定义你的食堂管理系统
- PHP中include和require
- 802.1X学习笔记
- Poj 2284 That Nice Euler Circuit
- 计算机考研计组简答题复习-本篇长期更新
- nssl1468-V【状压,数学期望,dfs】
- 国内开源项目无法形成气候且难以持续性的问题分析
- Strust2初之体验
- jsonobject修改key的值_JSONObject(org.json)的一点修改
- 定位导航方案在特殊环境下的适用说明
- python按键盘上哪个键运行_python按什么键运行
- win11休眠选项在哪 Windows11没有休眠选项的解决方法
- 移动跨平台框架React Native 基础教程【01】
- 【专项研究】支付宝会员积分体系
- 数据可视化之美-动态图绘制【补充】(以Python为工具)
- 爱快iKuai 安装成功后运行提示程序运行中解决办法
- 【专利转让】掌纹识别、图像复原、人脸检测定位相关领域
- 【IDEA】单独运行一个类的方法
- 安装包制作工具NSIS (NullSoft Scriptable Install System)
- Linux:ls命令
热门文章
- 几乎全面的食品英文总结 (吃遍英文单词)
- python中del和pop有什么区别_Python列表删除元素del、pop()和remove()的区别小结
- 如何只更新datetime类型字段中的日期
- 年度十大卫星图像排行榜
- java idle耗时_chrome中性能分析工具分析页面中Idle(空闲时间)占用太长时间,会不会影响页面性能,如果会是什么原因造成的?...
- 简单的出身年月实现 2018.9.29
- 无人驾驶特斯拉如何布局?
- 美食网站php模板,红色大气美食餐饮网站模板
- DEKRA德凯新设立首席数字官、首席运营官,任命两位新成员加入董事会
- LiveGBS国标流媒体GB28181微信无插件直播如何实现跨域鉴权