给定两个数组 nums1
和 nums2
,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序
示例:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 解释:[4,9] 也是可通过的
解决方法:
使用到了HashSet。这里介绍一下HashSet的add方法。
当HashSet调用add()方法存储对象的时候, 会计算得到一个哈希值,然后在哈希表中进行比较,
- 如果没有哈希值相同的对象就直接存入
- 如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存
代码部分:
package Class02;
import java.util.HashSet;
import java.util.Set;
/**
* 两个数组的交集,返回不重复的数
* 本例用到了hashset的方法
* HashSet:set.add() -> 在执行add函数时,会检测set中是否已有重复值,已存在就不会添加。
*/
public class LeetCode_349_intersection {
public int [] interSection(int [] nums1,int [] nums2){
if(nums1 == null || nums2 == null){
return null;
}
Set<Integer> set = new HashSet<>();
for(int i=0;i<nums1.length;i++){
for(int j=0;j<nums2.length;j++){
if(nums1[i] == nums2[j]){
set.add(nums1[i]);
}
}
}
int [] result = new int [set.size()];
int k=0;
//HashSet 没有索引,所以不能使用普通的for循环来遍历
for(int x : set){
result[k++] = x;
}
return result;
}
}
参考资料:https://blog.csdn.net/kairui007/article/details/50238717