刷题日记——两个数组的交集

23 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 17 天,点击查看活动详情

349. 两个数组的交集

力扣题目链接(opens new window)

给定两个数组 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语法,以及流的基础知识,掌握了这些,这道题就迎刃而解啦。