一、题目
给定两个数组 nums1
和 nums2
,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
二、示例:
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 解释:[4,9] 也是可通过的
提示:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000
三、题解
/**
*
*349. 两个数组的交集
* 简单
* 865
* 相关企业
* 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
*
* @param nums1
* @param nums2
* @return
*/
public int[] intersection(int[] nums1, int[] nums2) {
//创建hash对象:特点是不能存入相同的值,即,存入的值是唯一的
HashSet<Integer> hash = new HashSet<>();
//将nums1中的值存入hashset中
for (int i = 0; i < nums1.length; i++) {
hash.add(nums1[i]);
}
//存储俩个数组交集的集合,注意这里用的也是hash,如果搞不懂的话,可自己自己换成list试一下,建议实操一下,对这道题的理解会更加深刻
HashSet<Integer> res = new HashSet<>();
//遍历nums2,看hash中是否包含nums2
for (int i = 0; i < nums2.length; i++) {
if (hash.contains(nums2[i])) {
res.add(nums2[i]);
}
}
//将集合中的值导入数组中
int[] ans = new int[res.size()];
int count = 0;
for (Integer value : res) {
ans[count++] = value;
}
return ans;
}