package java程序员面试笔试宝典;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class 题8_5_16计算有序整型数组的交集 {
public static void main(String[] args) {
int[] a={1,2,3,4,5,7};
int[] b={-1,1,3,5,7};
//mixed_0(a, b);
//binSelect(a, -1, 0, a.length-1);
getMixed_0(a, b);
}
//顺序查找法
public static void getMixed_0(int[] a,int[] b){
int i=0;
int j=0;
while(j<a.length-1){
if(b[j]<a[i]){
j++;
}else if(b[j]==a[i]){
System.out.print(a[i]+" ");
j++;
i++;
}else{
i++;
}
//System.out.println(i+" "+count);
}
}
//二分查找法
public static void getMixed(int[] a,int[] b){
int low=0;
int high=a.length-1;
for (int i = 0; i < b.length; i++) {
int temp=binSelect(a, b[i], low, high);
low=temp;
}
}
public static int binSelect(int[] a,int k,int low,int high){
int i=low;
int j=high;
int mid=(i+j)/2;
while(i<=j){
mid=(i+j)/2;
if(k==a[mid]){
System.out.print(a[mid]+" ");
return mid;
}else if(k<a[mid]){
j=mid-1;
}else{
i=mid+1;
}
}
//System.out.println("没找到"+mid);
return mid;
}
//利用已知集合法
public static void mixed_0(int[] a,int[] b){
Set<Integer> set=new HashSet<Integer>();
for (int i = 0; i < a.length; i++) {
set.add(a[i]);
}
for (int i = 0; i < b.length; i++) {
if(!set.add(b[i])){
System.out.print(b[i]+" ");
}
}
}
//二路归并法
public static ArrayList<Integer> mixed(int[] a,int[] b){
int i=0;
int j=0;
ArrayList<Integer> list=new ArrayList<Integer>();
while(i < a.length&&j< b.length){
if(a[i]==b[j]){
list.add(a[i]);
i++;
j++;
}else if(a[i] < b[j]){
i++;
}else {
j++;
}
}
System.out.println(list);
return list;
}
}