Leetcode349两个数组的交集(java实现,思路超清晰想学会的进来!)

发布时间:2024年01月12日

今天,博主分享的题目是leetcode上的349两个数组的交集。题目描述如下:
在这里插入图片描述
解题思路:在这里我们分享一个做题的小技巧,我们拿到题如果题目描述中有判断某个集合中有没有哪个元素,类似这种要求的我们首先应该考虑是否可以使用哈希表。那么哈希表的3中结构分别是数组、set和map,这三种应该如果选择呢?当元素较少时可以考虑数组,数组底层是直接进行映射效率较快,set和map底层是使用红黑树,在查询时还要进行搜索的步骤,相对于数组效率较慢,而set比较适合数据较大时的场景,map适合元素较为分散的场景。
注意:本道题返回的结果需要进行去重处理,而set集合是不允许存在重复元素,因此最后选择使用set进行题解。
我们可以首先建立两个set集合set1set2set1用于存放nums1中的元素,并将nums中的元素存入set1,然后我们遍历nums2当set1与nums2存在相同元素时,将元素存入set2,最后我们创建一个数组arr,用于接收set2中的元素并进行返回即可。
代码实现:

 public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer>hash1=new HashSet();
        Set<Integer>hash2=new HashSet();
        int i =0;
        for (i=0;i<nums1.length;i++){
            hash1.add(nums1[i]);
        }
        for (i=0;i<nums2.length;i++){
            if (hash1.contains(nums2[i])){
                hash2.add(nums2[i]);
            }
        }
        int[] arr = new int[hash2.size()];
        int j = 0;
        for(Integer k : hash2){
            arr[j++] =  k;
        }

        return arr;
    }

这里我们再强调一个知识点,那就是最后我们在进行返回时,不能将set2集合直接进行返回,因为我们题目要求返回的时int数组,因此我们需要遍历set集合并将集合中的元素存放到数组中,我们一般是利用迭代器进行对集合遍历,那么这样操作起来太过繁琐,因此这里我们使用是增强for循环,增强for循环可以可以用来遍历数组、集合、列表等元素序列类型的数据结构。下面的代码是增强for循环的用法示例:

int[] nums = {1, 2, 3, 4, 5};
for (int num : nums) {
    System.out.print(num + " ");
}

增强for循环的优点是简洁明了,可以提高代码的可读性和可维护性。但是它也有一些缺点,例如无法获取当前元素的下标,不支持在循环中修改集合或数组的元素等。因此,在某些情况下,仍然需要使用传统的for循环来实现更复杂的逻辑。
那么本次题目的分享就到这里结束了,如果觉得博主写的博文对你有帮助希望给博主来个三连谢谢(_)!

文章来源:https://blog.csdn.net/Kirihara_Yukiho/article/details/135545083
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。