如何求两个数组的交集
如何求两个数组的交集?
有两个数组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最好是排序的。
既然是排序好的,
那么可以直接对比a和b的元素
i融智于家乐福专业的超市管理技术,j是a,b中元素的当前位置
Java code while(ngth j ngth){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 ngth; i++){ for(int j = 0; j ngth; j++){ if(b[i] == a[j]){ int(" " + b[i]); break; } else continue; } } }}
热淋清颗粒的作用经常肝不适怎么办好乳腺增生-
杜高犬得了皮肤病要如何治疗什么原因会引起位置
杜高犬得了皮肤病要如何治疗?什么原因会引起杜高犬得 09:53 来源:络 作者:络 ...[详细]
装修日记2022.06.12
-
松狮各项特征标准位置
松狮各项特征标准松狮各项特征标准 04:01:42出处:络点击:2167 导读: 松狮各项特征标准:粘人程...[详细]
装修日记2022.06.12
-
杜高犬为什么要剪耳朵杜高犬剪耳朵的原因有位置
杜高犬为什么要剪耳朵?杜高犬剪耳朵的原因有哪些?杜高犬为什么要剪耳朵?杜高犬剪耳朵的原因有哪些? 10:19:05by 呦呦杜高犬是阿...[详细]
装修日记2022.06.12