给定两个数组?nums1
?和?nums2
?,返回?它们的交集?。输出结果中的每个元素一定是?唯一?的。我们可以?不考虑输出结果的顺序?。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]
这道题让我们找到两个数组中重复的数,而且不能直接遍历输出,因为他只返回唯一的数,所以我们直接考虑set来实现。把数组1保存在HashSet中,然后遍历数组2的值,如果当前值已存在Set中,则该值为交集。同理,我们将交集保存在Set中去重,最后转换成int数组返回。
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if(nums1==null||nums1.length==0||nums2==null||nums2.length==0)
{
return new int[0];
}
Set<Integer>set1=new HashSet<>();
Set<Integer>resset=new HashSet<>();
for(int i:nums1)
{
set1.add(i);
}
for(int i:nums2)
{
if(set1.contains(i))
{
resset.add(i);
}
}
int []arr=new int[resset.size()];
int j=0;
for(int i:resset)
{
arr[j++]=i;
}return arr;
}
}
嗯...因为他是一个有范围的数组,我们也可以用哈西数组来实现:
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
int[] hash1 = new int[1002];
int[] hash2 = new int[1002];
for(int i : nums1)
hash1[i]++;
for(int i : nums2)
hash2[i]++;
List<Integer> resList = new ArrayList<>();
for(int i = 0; i < 1002; i++)
if(hash1[i] > 0 && hash2[i] > 0)
resList.add(i);
int index = 0;
int res[] = new int[resList.size()];
for(int i : resList)
res[index++] = i;
return res;
}
}
这个哈西好懵啊整的我,害,经受磨砺把........哭死?