1,先对数组进行排序 先对两个数组进行排序,然后使用两个指针,分别指向两个数组开始的位置。
如果两个指针指向的值相同,说明这个值是他们的交集,就把这个值加入到集合list中,然后两个指针在分别往后移一步。 如果两个指针指向的值不同,那么指向的值相对小的往后移一步,相对大的先不动,然后再比较
public int[] intersect (int[] nums1, int[] nums2){
int len1 = nums1.length;
int len2 = nums2.length;
int len = len1 < len2 ? len1 : len2;
int ans[] = new int[len];
if (len1 == 0 || len2 == 0) return ans;
//排序
Arrays.sort(nums1);
Arrays.sort(nums2);
int i = 0, j = 0, k = 0;
while (i < len1 && j < len2){
//假如相等 都往后移动
//不相等 谁小 谁就往后移动
if (nums1[i] == nums2[j]){
ans[k] = nums1[i];
i++;
j++;
k++;
}
else if(nums1[i] < nums2[j]){
i++;
}else {
j++;
}
}
return Arrays.copyOfRange(ans,0,k);
}