方法:哈希法。(用set)
怎么想到的:返回它们的交集,就是看一些元素是否存在于集合中,针对判断一个元素是否出现集合里的时候,就要考虑哈希法。而如果用哈希法,就开始想用数组,set还是map。而本题要求输出结果的每个元素是唯一的,而set有去重的功能,因此用set。
思路:将第一个数组存入HashSet中(set会去重复)。遍历第二个数组,有与第一个数组相同的元素存入set1中。将set1中的元素存入数组,返回数组。
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
//两个数组有一个为空,交集就为空
if(nums1==null||nums2==null)
return new int[0];
//set存放第一个数组的元素(注意set可以去重复)
//set1存放数组2和数组1相同的元素
HashSet<Integer>set=new HashSet<>();
HashSet<Integer>set1=new HashSet<>();
//n用来记录两数组相同的元素个数,方便设置返回的数组大小
int n=0;
//遍历数组1存入set
for(int c:nums1)
set.add(c);
//遍历数组2
for(int c:nums2)
{
//如果有相同元素,存入set1
if(set.contains(c))
set1.add(c);
}
//存入相同元素个数
n=set1.size();
//没有相同元素
if(n==0)
return new int[0];
//有相同元素,由n设置数组大小
int a[]=new int[n];
int i=0;
//将相同元素存入数组中,并返回
for(int c:set1)
a[i++]=c;
return a;
}
}