力扣(349.两个数组的交集)

2023-12-27 04:36:08

给定两个数组?nums1?和?nums2?,返回?它们的交集?。输出结果中的每个元素一定是?唯一?的。我们可以?不考虑输出结果的顺序?。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

题目讲解:

这道题让我们找到两个数组中重复的数,而且不能直接遍历输出,因为他只返回唯一的数,所以我们直接考虑set来实现。把数组1保存在HashSet中,然后遍历数组2的值,如果当前值已存在Set中,则该值为交集。同理,我们将交集保存在Set中去重,最后转换成int数组返回。

代码实现:

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>resset=new HashSet<>();
        for(int i:nums1)
        {
            set1.add(i);
        }
        for(int i:nums2)
        {
            if(set1.contains(i))
            {
                resset.add(i);
            }
        }
        int []arr=new int[resset.size()];
        int j=0;
        for(int i:resset)
        {
            arr[j++]=i;
        }return arr;
    }
}

嗯...因为他是一个有范围的数组,我们也可以用哈西数组来实现:

哈西数组:

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        int[] hash1 = new int[1002];
        int[] hash2 = new int[1002];
        for(int i : nums1)
            hash1[i]++;
        for(int i : nums2)
            hash2[i]++;
        List<Integer> resList = new ArrayList<>();
        for(int i = 0; i < 1002; i++)
            if(hash1[i] > 0 && hash2[i] > 0)
                resList.add(i);
        int index = 0;
        int res[] = new int[resList.size()];
        for(int i : resList)
            res[index++] = i;
        return res;
    }
}

这个哈西好懵啊整的我,害,经受磨砺把........哭死?

?

?

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