美文网首页
(LeetCode 349) 两个数组的交集

(LeetCode 349) 两个数组的交集

作者: lconcise | 来源:发表于2021-09-27 19:01 被阅读0次

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

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

示例 2:

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

说明:

  1. 输出结果中的每个元素一定是唯一的。
  2. 我们可以不考虑输出结果的顺序。

解法一:

    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set = new HashSet<>();

        // 遍历获取交集,Set集合去重
        for (int i = 0; i < nums1.length; i++) {
            for (int j = 0; j < nums2.length; j++) {
                if (nums1[i] == nums2[j]) {
                    set.add(nums1[i]);
                }
            }
        }

        // Set集合转数组
        int[] a = new int[set.size()];
        int index = 0;
        for (int i : set) {
            a[index++] = i;
        }
        return a;
    }

时间复杂度O(m*n)

解法二:

    public static int[] intersection02(int[] nums1, int[] nums2) {
        // 比较数组大小
        int[] maxNum;
        int[] minNum;
        if (nums1.length > nums2.length) {
            maxNum = nums1;
            minNum = nums2;
        } else {
            maxNum = nums2;
            minNum = nums1;
        }
        // 数组大的转Set集合,Set集合去重
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < maxNum.length; i++) {
            set.add(maxNum[i]);
        }
        // 遍历小的数组,取交集
        HashSet<Integer> resultSet = new HashSet<>();
        for (int i = 0; i < minNum.length; i++) {
            if (set.contains(minNum[i])) {
                resultSet.add(minNum[i]);
            }
        }
        // Set集合转数组
        int[] result = new int[resultSet.size()];
        int i = 0;
        for (int x : resultSet) {
            result[i++] = x;
        }

        return result;
    }

时间复杂度O(m+n)

相关文章

网友评论

      本文标题:(LeetCode 349) 两个数组的交集

      本文链接:https://www.haomeiwen.com/subject/cskknltx.html