力扣简单题系列:两个数组的交集(LeetCode 349)

力扣简单题系列:两个数组的交集(LeetCode 349)

题目描述:

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

示例:

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

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

解题思路:

这道题的核心是找到两个数组中共同出现的元素,并且结果中的元素是唯一的。以下是几种常见的解法:

方法 1:哈希集合法
  • 使用哈希集合存储一个数组的元素,然后遍历另一个数组,检查元素是否存在于集合中。
  • 时间复杂度:O(m + n),空间复杂度:O(m) 或 O(n)。
方法 2:排序 + 双指针法
  • 将两个数组排序,然后使用双指针遍历两个数组,找到共同的元素。
  • 时间复杂度:O(m log m + n log n),空间复杂度:O(1)(如果使用原地排序)。

这里我们重点讲解 哈希集合法,因为它既高效又容易理解。


️ 哈希集合法解法:

  1. 初始化:

    • 创建一个哈希集合 set,用于存储 nums1 中的元素。
    • 创建一个哈希集合 resultSet,用于存储结果。
  2. 存储 nums1 的元素:

    • 遍历 nums1,将每个元素添加到 set 中。
  3. 查找交集:

    • 遍历 nums2,检查每个元素是否存在于 set 中:
      • 如果存在,则将该元素添加到 resultSet 中。
  4. 返回结果:

    • resultSet 转换为数组并返回。

️ Java代码实现:

import java.util.HashSet;
import java.util.Set;

public class IntersectionOfTwoArrays {
    public int[] intersection(int[] nums1, int[] nums2) {
        // 创建哈希集合,存储 nums1 的元素
        Set<Integer> set = new HashSet<>();
        for (int num : nums1) {
            set.add(num);
        }

        // 创建哈希集合,存储结果
        Set<Integer> resultSet = new HashSet<>();

        // 遍历 nums2,查找交集
        for (int num : nums2) {
            if (set.contains(num)) {
                resultSet.add(num);
            }
        }

        // 将 resultSet 转换为数组
        int[] result = new int[resultSet.size()];
        int index = 0;
        for (int num : resultSet) {
            result[index++] = num;
        }

        return result;
    }
}

代码解释:

  1. 初始化:

    • 创建两个哈希集合:set 用于存储 nums1 的元素,resultSet 用于存储结果。
  2. 存储 nums1 的元素:

    • 遍历 nums1,将每个元素添加到 set 中。
  3. 查找交集:

    • 遍历 nums2,检查每个元素是否存在于 set 中:
      • 如果存在,则将该元素添加到 resultSet 中。
  4. 返回结果:

    • resultSet 转换为数组并返回。

举个例子:

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

  1. 存储 nums1 的元素:

    • set = {1, 2}
  2. 查找交集:

    • 遍历 nums2
      • 2 存在于 set 中,添加到 resultSetresultSet = {2}
  3. 返回结果:

    • resultSet 转换为数组 [2]

输出:[2]


⏳ 复杂度分析:

  • 时间复杂度: O(m + n),其中 m 和 n 分别是 nums1nums2 的长度。
  • 空间复杂度: O(m) 或 O(n),取决于 nums1nums2 的大小。

总结:

这道题通过哈希集合法,高效地找到了两个数组的交集。对于初学者来说,掌握哈希集合的使用是解决类似问题的关键。


互动环节:

  • 你有更好的解法吗?欢迎在评论区分享!
  • 如果你对这道题有任何疑问,也可以在评论区留言,我会尽力解答!

相关推荐:

  • 力扣简单题系列:存在重复元素(LeetCode 217)
  • 力扣简单题系列:多数元素(LeetCode 169)
  • 力扣简单题系列:合并两个有序数组(LeetCode 88)
  • 力扣简单题系列:x的平方根(LeetCode 69)
  • 力扣简单题系列:二进制求和(LeetCode 67)

我是Yohen,一名正在成长的技术博主,欢迎关注我,一起学习,一起进步!

你可能感兴趣的:(力扣简单题,leetcode,算法,职场和发展)