/**
* 求解两个有序数组的交集
* @param a
* @param b
* @return
*/
public static List<Integer> join(int[] a , int[] b){
List<Integer> list = new LinkedList<Integer>();
int ai = 0;
int bi = 0;
while(ai < a.length && bi < b.length){
if(a[ai] == b[bi]){
//两个相等即交集
list.add(a[ai]);
ai++;
bi++;
}
else if(a[ai] > b[bi]){
//移动小得数组index
bi++;
}
else{
//移动小值得数组index
ai ++;
}
}
return list;
}
/**
* 求解两个有序数组的并集
* @param a
* @param b
* @return
*/
public static List<Integer> merge(int[] a , int[] b){
List<Integer> list = new LinkedList<Integer>();
int ai = 0;
int bi = 0;
while(ai < a.length && bi < b.length){
if(a[ai] < b[bi]){
list.add(a[ai]);
ai++;
}
else if(a[ai] > b[bi]){
list.add(b[bi]);
bi++;
}
else {
list.add(a[ai]);
ai++;bi++;
}
}
//剩余的直接插入到结果集的末尾
if(ai < a.length){
for(;ai < a.length ; ai++){
list.add(a[ai]);
}
}
else if(bi < b.length){
for(;bi < b.length ; bi++){
list.add(b[bi]);
}
}
return list;
}