leetcode349-两个数组的交集

原题

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

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

示例2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [9,4]

解法

思想

哈希集,第一个数组中出现的数加入到集合中,第二个数组中存在集合中的数则加入到一个新的集合中,最后把第二个集合变成数组返回。

代码

这种写法没有用第二个集合,但是思想是一样的,计算并集大小的过程中不要浪费时间,可以将并集元素搞在一块区域,然后复制地址空间返回。

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set = new HashSet<>();
        int size = 0;
        for(int i:nums1){
            set.add(i);
        }
        for(int i = 0;i<nums2.length;i++){
            if(set.contains(nums2[i])){
                nums1[size] = nums2[i];
                set.remove(nums2[i]);
                size++;
            }
        }
        int[] result = new int[size];
        System.arraycopy(nums1,0,result,0,size);
        return result;
    }
}

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode349-%e4%b8%a4%e4%b8%aa%e6%95%b0%e7%bb%84%e7%9a%84%e4%ba%a4%e9%9b%86/