题目
思路
将较长的序列放入一个set后,再加入短序列的数字,判断当前数字是否添加成功,如果添加成功则表示set中没有该数字,则不属于两个数组之间的交集,将该数字从set中移除(移除是因为保证set的纯洁性 即只含有长序列中的数字);如果添加失败,则表示该数字则是两个数组的交集,将该数字添加到交集set中。最后由于该函数返回的是int[],则需要将交集set转化为int[].
代码
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
HashSet<Integer> temp_1 = new HashSet<Integer>();
HashSet<Integer> temp_2 = new HashSet<Integer>();
// 保证nums1是较长的序列
if(nums1.length < nums2.length){
int[] temp = nums1;
nums1 = nums2;
nums2 = temp;
}
for (int i: nums1) {
temp_1.add(i);
}
for (int i: nums2) {
// 添加成功 表示set中没有该数字,则不是交集
if(!temp_1.add(i)){
temp_2.add(i);
}
else{
temp_1.remove(i);
}
}
// 将set转化为int[]
// 可以使用该语句进行代替:return temp_2.stream().mapToInt(x -> x).toArray();
int[] out = new int[temp_2.size()];
int i = 0;
for (int a: temp_2) {
out[i] = a;
i++;
}
return out;
}
}