题意:给定两个数组,编写一个函数来计算它们的交集。
说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。
输出结果中的每个元素一定是唯一的,也就是说输出的结果的去重的, 同时可以不考虑输出结果的顺序 。使用数组来做哈希的题目,是因为题目都限制了数值的大小。而且如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。set会更适用。但不能统统无脑使用set,因为不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的。
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
//无重复的哈希
Set<Integer> Set1 = new HashSet<>();
Set<Integer> resSet = new HashSet<>();
//把数组1去重添加进集合
for (int i : nums1) {
Set1.add(i);
}
//数组2筛选
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;
}
}