首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >精选题详解之我们在何处相遇?

精选题详解之我们在何处相遇?

作者头像
公众号袁厨的算法小屋
发布2020-11-25 09:38:05
发布2020-11-25 09:38:05
4480
举报

题目描述:两个数组的交集

题目来源:leetcode

题目链接:https://leetcode-cn.com/problems/intersection-of-two-arrays/

题目:给定两个数组,编写一个函数来计算它们的交集。

示例 1:

代码语言:javascript
复制
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

示例 2:

代码语言:javascript
复制
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]

说明:

输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。

双HashSet

做题思路

做这个题目之前我们应该了解一下HashSet的用途,不然代码可能不是特别容易理解。 HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。是无序的,允许有null值。我们把他当成是一个不允许存取重复元素的容器就好。 然后我们来看一下题目描述,他的要求就是我们找出两个数组的交集,重复的时候则只保留一个,比如交集为[2,2]则我们只需输出[2]即可。 因为HashSet是不允许有重复元素的,所以我们先通过HashSet保存数组1的值(去重),然后我们再遍历数组2,判断HashSet里是否有数组2的值,如果含有则说明该值在两个数组都出现了,则保存到动态数组中。然后remove掉出现过的值,(可以看代码注释)遍历结束后,动态数组中保存的则是去重后的子集。该方法接近双100,还是挺不错的方法。

题目代码
代码语言:javascript
复制
class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
         if(nums1.length == 0 || nums2.length == 0){
              int[] arr = new int[0];
              return arr;
         }
         //用来保留num1的去重结果
         HashSet<Integer> num1set = new HashSet<Integer>();
         //用来保存查询到的子集,动态数组,因为最后返回值是数组,
         //但是我们现在不知道子集的元素有多少个,所以不可以直接定义数组
         ArrayList<Integer> childarr = new ArrayList<Integer>(); 
         //将数组1的值存到HashSet里      
         for(int i = 0 ;i < nums1.length ; i++){
             num1set.add(nums1[i]);
         }
         //遍历数组2,判断是否在1中出现
         for(int j = 0; j<nums2.length;j++){
             if(num1set.contains(nums2[j])){
                 childarr.add(nums2[j]);
                 //这个是关键,防止重复插入,因为数组2里可能会有重复值。
                 //例num1=[1,2,1,3],num2=[2,1,1,4],子集为[1,2],HashSet值为[1,2,3]
                 //但是我们不加这一行的话,当我们遍历数组2,遍历到第一个1时,插入,第二个1仍会插入,
                //所以需要remove出现过的值。
                 num1set.remove(nums2[j]);
             }
         }
         //将arraylist元素保存到数组中
         int[] renum = new int[childarr.size()];
         for(int i = 0 ;i<childarr.size();i++){
             renum[i] = childarr.get(i); 
         }
         return renum;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 袁厨的算法小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:两个数组的交集
    • 双HashSet
      • 做题思路
      • 题目代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档