【leetcode】袁厨每日精选题详解之我们在何处相遇


题目描述

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

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2
输入: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,还是挺不错的方法。

题目代码

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;
    }
}


总结

  大家好我是袁厨,一位酷爱做饭自己考取了厨师证的菜鸡程序员,每天会为大家分享一道精选算法题,力求用最清晰的思路和最简单的方式给大家描述题目算法思想,微信搜索【程序员爱做饭】或扫描下方二维码关注我吧!

在这里插入图片描述

作者:LeetCode
链接:https://leetcode-cn.com/problems/rotate-array/solution/xuan-zhuan-shu-zu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自blog.csdn.net/tan45du_yuan/article/details/109158951