描述:
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2]
解法:
先将两个数组进行排序,然后使用两个指针分别指向第一个数组和第二个数组,因为数组是排好序的,所以各个数组中的数是连续增长的,当数组一和数组二中的数不相等时,由小的数所在的数组的指针进行递增。如果两个数相等,那么就取这个数,同时将两个指针都增加。最后返回数组。
public int[] intersect(int[] nums1, int[] nums2) {
// if(nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0)
// return null;
int len1 = nums1.length;
int len2 = nums2.length;
Arrays.sort(nums1);
Arrays.sort(nums2);
int min = len1 > len2 ? len2 : len1;
int[] res = new int[min];
int count = 0;
for(int i = 0,j = 0; i<len1&&j<len2; ){
if(nums1[i] < nums2[j]){
i++;
continue;
}else if(nums1[i] > nums2[j]){
j++;
continue;
}else if(nums1[i] == nums2[j])
res[count++] = nums1[i];
i++;
j++;
}
return Arrays.copyOf(res, count);
}