问题描述:
假设两个含有n个元素的有序(非降序)整型数组a和b,其中 a = { 0,1,2 ,3,4 }, b = { 1,3,5,7,9 }.那么他们的交集为{ 1,3 }
实现思路:
1)二路归并法:分别从i,j从头开始遍历两个数组。
若当前遍历的位置a[i]==b[j],则次=此数为两个数组的交集,记录下来,并且继续向后遍历a1,b1.
若a[i] > b[j] ,则继续向后遍历b
若a[i] < b[j], 则继续向后遍历a[i],直到有一个数组结束遍历即停止。
2)顺序遍历法:顺序遍历两个数组,将数组元素存放到哈希表中,同时对统计的数组元素进行计数,若为2,则为二者的交集元素。
3)散列表法:遍历两个数组中任意一个数组,将遍历得到的元素存放到散列表,然后遍历另外一个数组,同时对建立的散列表进行查询,若存在,则为交集元素。
实现代码:二路归并法
package JBArray;
import java.util.ArrayList;
public class Mixed {
private static ArrayList<Integer> mixed(int[] a, int[] b) {
ArrayList<Integer> mix = new ArrayList<Integer>();
int alen = a.length;
int blen = b.length;
int i=0,j=0;
while(i<alen && j<blen){
if(a[i] == b[j]){
mix.add(a[i]);
i++;j++;
}else if(a[i] > b[j]){
j++;
}else{
i++;
}
}
return mix;
}
public static void main(String[] args) {
int a[] = {0,1,2,3,4};
int b[] = {1,3,5,7,9};
ArrayList<Integer> mix = mixed(a,b);
for(int i:mix){
System.out.print(i+" ");
}
}
}