给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [9,4]
说明:
- 输出结果中的每个元素一定是唯一的。
- 我们可以不考虑输出结果的顺序。
https://leetcode-cn.com/problems/intersection-of-two-arrays/description/
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if (nums1.length == 0 || nums2.length == 0) {
return new int[]{};
}
//排序
Arrays.sort(nums1);
Arrays.sort(nums2);
//结果数组下标,nums1下标,nums2下标
int i = 0, index1 = 0, index2 = 0;
int max1 = nums1[nums1.length - 1];
int max2 = nums2[nums2.length - 1];
//当大于另一数组最大值时,不需要继续遍历了
while (index1 < nums1.length && index2 < nums2.length && nums1[index1] <= max2 && nums2[index2] <= max1) {
//越过相同的数
if (index1 > 0 && nums1[index1] == nums1[index1 - 1]) {
index1++;
continue;
}
if (index2 > 0 && nums2[index2] == nums2[index2 - 1]) {
index2++;
continue;
}
if (nums1[index1] < nums2[index2]) {
//小于时,nums1继续移位
index1++;
} else if (nums1[index1] > nums2[index2]) {
//反之nums2移位
index2++;
} else {
//相等时,把交集存储到结果数组中,这里把nums1当作结果数组
nums1[i++] = nums1[index1++];
index2++;
}
}
//返回i长度的数组,即交集
return Arrays.copyOf(nums1, i);
}
}