1、排序+双指针
交集:
用两个指针分别指向两个数组的头部。如果其中一个元素比另一个小,后移小的那个数组的指针;如果相等,那么把该元素添加到交集里,同时后移两个数组的指针。一直这样操作下去,直到有一个指针超过数组范围。
public List intersection(int[] a, int[] b){//a和b已经排好序
List<Integer> result=new ArrayList<>();
int i=0,j=0;
while(i<a.length && j<b.length){
if(a[i]<b[j]){
i++;
}else if(a[i]>b[j]){
j++;
}else{
result.add(a[i]);
i++;
j++;
}
}
return result;
}
并集:
用两个“指针”分别指向两个数组的头部。如果其中一个数组的元素比另一个小,把该元素添加到并集里,后移小的那个数组的指针;如果相等,那么把该元素添加到并集里,同时后移两个数组的指针。一直这样操作下去,直到有一个指针超过数组范围。将两个数组中没有遍历完的那个数组的其余元素全部添加进并集里。