博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求两个已排序数组的交集
阅读量:5939 次
发布时间:2019-06-19

本文共 810 字,大约阅读时间需要 2 分钟。

问题: 给你两个排序的数组,求两个数组的交集?比如: A = 1 3 4 5 7, B = 2 3 5 8 9

 

 

代码实现:

public LinkedList
intersection(int[] A, int[] B) { if (A == null || B == null || A.length == 0 || B.length == 0) return null; LinkedList
list = new LinkedList
(); int pointerA = 0; int pointerB = 0; while (pointerA < A.length && pointerB < B.length) { if (A[pointerA] < B[pointerB]) pointerA++; else if (A[pointerA] > B[pointerB]) pointerB++; else { list.add(A[pointerA]); pointerA++; pointerB++; } } return list; }

 

代码分析:

因为数组A B均排过序,所以,我们可以用两个“指针”分别指向两个数组的头部,如果其中一个比另一个小,移动小的那个数组的指针;如果相等,那么那个值是在交集里,保存该值, 这时,同时移动两个数组的指针。一直这样操作下去,直到有一个指针已经超过数组范围。通过上面的算法可以得知,该算法复杂度为O(N + M).

 

转载地址:http://bottx.baihongyu.com/

你可能感兴趣的文章
【文文殿下】[BZOJ4008] [HNOI2015] 亚瑟王
查看>>
31.图片放大镜插件——jqzoom
查看>>
安装MySQL时,出现的1067问题详解
查看>>
【Gamma】Scrum Meeting 6
查看>>
WindowsForm 增 删 查 改
查看>>
为页内的tab添加的iframe添加加载动画过渡效果
查看>>
P1067 多项式输出 (模拟)
查看>>
javap使用
查看>>
php gettext
查看>>
Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份
查看>>
练习方法--刻意练习
查看>>
多进程
查看>>
Java方式 MySQL数据库连接
查看>>
MATLAB2012 licence失效解决方法
查看>>
Android ListView初始化将实例化多少个item
查看>>
[LeetCode] Factorial Trailing Zeroes 阶乘末尾0
查看>>
消除字号标签<h1><h2><h3>的自动换行
查看>>
关于ListView的一些不常用到的属性
查看>>
201521123040《Java程序设计》第13周学习总结
查看>>
Mybatis的分页插件com.github.pagehelper
查看>>