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

本文共 868 字,大约阅读时间需要 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).

 

转载于:https://www.cnblogs.com/mr-wuxiansheng/p/7706221.html

你可能感兴趣的文章
高并发下线程安全的单例模式
查看>>
Windows下修改Git bash的HOME路径(转)
查看>>
第三章 TCP/IP
查看>>
【cocos2d-x制作别踩白块儿】第一期:游戏介绍
查看>>
发现的最大数量
查看>>
Ubuntu12.04环境搭建遇到的问题和建议(一个)
查看>>
19.最经济app发短信的方法
查看>>
从零開始学android&lt;SeekBar滑动组件.二十二.&gt;
查看>>
教你用笔记本破解无线路由器password
查看>>
网络编程学习小结
查看>>
JS面向对象
查看>>
excel VLOOKUP函数的用法
查看>>
设计模式
查看>>
orm介绍
查看>>
一个简单程序快速入门JDBC
查看>>
DBA_Oracle基本体系内存和进程结构(概念)
查看>>
unisynedit 在Delphi 2010下的编译问题
查看>>
每日定理3
查看>>
在公司就职时应该注意的事项
查看>>
springMVC整合jedis+redis
查看>>