题目
题意:给定两个数组,编写一个函数来计算它们的交集。
注意:本题没有限制数值大小,无法用数组来做哈希表了,而且如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费,采用另一种数据结构Set。
思路
输出结果中的每个元素一定是唯一的,也就是说输出的结果的去重的, 同时可以不考虑输出结果的顺序
唯一性——>Set
import java.util.HashSet;
import java.util.Set;
class Solution{
public int[] intersection(int[] nums1,int[] nums2){
if(nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0){
return new int[0];//返回长度为0的空数组,防止编译报错,返回数组的方法在没有结果时通常返回空数组,而不是null,这样比较方便,因为返回null调用方法还需要先判断是否返回null才能对返回数组进一步处理,如果返回空数组则无须null引用检查
}
Set<Integer> set1 = new HashSet<>();
Set<Integer> retSet = new HashSet<>();//存储相交的唯一元素
//先遍历数组1
for(int i : nums1){//foreach适合遍历操作,不适合修改操作
set1.add(i);
}
//遍历数组2的同时判断哈希表中是否存在该元素
for(int i : nums2){
if(set1.contains(i)){
retSet.add(i);
}
}
//将结果Set集合转化成数组
int[] resArr = new int[retSet.size()];//开辟一个和retSet大小一样的数组
int index = 0;//index代表resArr的下标索引
for(int i : retSet){//i代表retSet中的每个元素
resArr[index++] = i;//每扔一个值进去下标index+1
}
return resArr;
}
}