开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 17 天,点击查看活动详情
349. 两个数组的交集
给定两个数组 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
知识储备
这道题会用到hashSet,所以我们先来学习一下
- 基于hashMap实现,不允许有重复的元素,允许有null值
- 无序的,不会记录插入的顺序
- 实现了Set接口
- 包装的基本类型:boolean,byte,short,int,long,float,double,char
hashSet在java.util包中,要实现他需要引入该包
import java.util.HashSet; // 引入 HashSet 类
假如我们想要创建一个hashSet对象sites,用来保存字符串,语法就是这样的
HashSet<String> sites = new HashSet<String>();
关于一些基本操作的语法
-
添加元素 ,重复的元素不会被添加
sites.add("a");
-
判断元素是否存在
sites.contains("a"); //true
-
删除元素
sites.remove("a");
-
清除所有元素
sites.clear();
-
迭代
for (String i : sites) { System.out.println(i); }
解法
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> res=new HashSet<>();
for(int i : nums1){
set1.add(i);
}
for(int i:nums2){
if(set1.contains(i)) res.add(i);
}
return res.stream().mapToInt(x -> x).toArray();
}
}
这里最后直接return,用的是将结果集合转为数组,其实还有另一种方法,我们也可以另外申请一个数组存放setRes中的元素,最后返回数组,那么就会把最后的return语句换成下面这种写法:
int[] arr = new int[setRes.size()];
int j = 0;
for(int i : setRes){
arr[j++] = i;
}
return arr;
这道题基本思路不难,主要就是学java中的HashSet语法,以及流的基础知识,掌握了这些,这道题就迎刃而解啦。