LeetCode 349: 两个数组的交集
⭕️ 解题思路:
(1)“元素唯一”,我们想到可以用Set集合,因为不能存储重复的元素
(2)因为肯定要涉及两个数组元素的比较,所以我们创建两个哈希集合,将其中一个数组的元素放到集合,遍历另一个数组,如果在集合中,就将这个元素添加到另一个哈希集合中。
(3)最后就要将哈希表转化为数组,推荐一下两种方法:
- 方法一:初始化一个数组,遍历结果哈希表
int [] arr = new int[resSet.size()];
int index = -1;
for(Integer i : resSet){
arr[++index] = i;
}
- 方法二:利用stream流操作将HashSet转化为数组
int[] a = set.stream().mapToInt(Integer::intValue).toArray();
PS:
(1)尽管集合提供
toArrays()
方法,但是返回的对象是Object的
(2)方法一比方法二中运行快,方法二在开发中常用
❌ 代码部分:
class Solution {
static final int N = 1010;
public int[] intersection(int[] nums1, int[] nums2) {
HashSet<Integer> set = new HashSet<Integer>();
HashSet<Integer> resSet = new HashSet<Integer>();
int index = -1;
for(int i = 0; i < nums1.length; i++){
set.add(nums1[i]);
}
for(int j = 0; j < nums2.length; j++){
if(set.contains(nums2[j])){
resSet.add(nums2[j]);
}
}
int [] arr = new int[resSet.size()];
for(Integer k : resSet){
arr[++index] = k;
}
return arr;
}
}