[leetCode]349. 两个数组的交集

csdn:https://blog.csdn.net/renweiyi1487/article/details/109264635

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

示例 1:

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

示例 2:

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

哈希

求两个数组的交集就是求两个数组的共有元素,可以使用两个set集合来存放每个数组中不重复的元素,然后迭代另一个set集合中的元素,如果迭代元素属于另一个set集合则该元素属于交集中的元素。

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        List<Integer> ans = new ArrayList<>();
        HashSet<Integer> set1 = new HashSet<>();
        HashSet<Integer> set2 = new HashSet<>();
        for (Integer num : nums1) {
            set1.add(num);
        }
        for (Integer num : nums2) {
            set2.add(num);
        }
        Iterator<Integer> it = set2.iterator();
        while (it.hasNext()) {
            int num = it.next();
            if (set1.contains(num)) {
                ans.add(num);
            }
        }
        int[] finalAns = new int[ans.size()];
        for (int i = 0; i < finalAns.length; i++) {
            finalAns[i] = ans.get(i);
        }
        return finalAns; 
    }
}

写法二:

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        int[] output = new int[nums1.length];
        HashSet<Integer> set1 = new HashSet<>();
        HashSet<Integer> set2 = new HashSet<>();
        for (Integer num : nums1) {
            set1.add(num);
        }
        for (Integer num : nums2) {
            set2.add(num);
        }
        int idx = 0;
        for (Integer num : set2) {
            if (set1.contains(num))
                output[idx++] = num;
        }
        return Arrays.copyOf(output, idx); 
    }
}
posted @ 2020-10-24 20:03  消灭猕猴桃  阅读(82)  评论(0编辑  收藏  举报