扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
如何求两个数组的交集?
有两个数组a{1,5,8,10,14,15,17,18,20,22,24,25,28}和b{2,4,6,8,10,12},如何求出他们之间的交集?要求效率越高越好
注:数组都是从小到大排序好的.
首先确定好单独的数组有无重复的,如果没有,可以先把一个数组放到set中去,比如把a放到set中去,再遍历b数组放到set中去,如果set的size没有变化,那么b中的这个元素就是重复元素,也就是所谓的交集。上面这个算法 有没有排过序都可以做 但是有一点需要注意:比如我把a加到数组中,其实a中有无重复的不要紧,但是如果b中有重复的,比如有2个100,但是100恰好又不在a中,这样的情况下,上面的算法就会把100当做a和b交集的一部分,所以要避免这种情况。其实解决b中的重复也很简单,只要在遍历b的时候,判断一下当前的这个元素是否和前面的元素一样,如果一样,那就continue执行下一次循环。
所以总结起来看,在这个算法中,如果a是第一个放到set中去的话,那么a有没有排序无所谓;但是为了避免麻烦,b最好是排序的。
while(i<a.length && j < b.length) { if(a[i] < b[j]) { i++; } else if (a[i] == b[j]) { 输出这个元素; i++; j++; } else { j++; } }
高效率的上面都说了,我写个低效率的,优点在于没用API中现成的方法,笔试时经常碰到这种变态要求。。。
- Java code
public class TestUnion { public static void main(String args[]){ int a[] = {1,5,8,10,14,15,17,18,20,22,24,25,28}; int b[] = {2,4,6,8,10,12}; for(int i = 0; i < b.length; i++){ for(int j = 0; j < a.length; j++){ if(b[i] == a[j]){ System.out.print(" " + b[i]); break; } else continue; } } } }
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者