跳至主要內容

349. 两个数组的交集


349. 两个数组的交集

🟢   🔖  数组 哈希表 双指针 二分查找 排序  🔗 力扣open in new window LeetCodeopen in new window

题目

Given two integer arrays nums1 and nums2, return an array of their intersection. Each element in the result must be unique and you may return the result in any order.

Example 1:

Input: nums1 = [1,2,2,1], nums2 = [2,2]

Output: [2]

Example 2:

Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]

Output: [9,4]

Explanation: [4,9] is also accepted.

Constraints:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

题目大意

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

示例 1:

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

输出:[2]

示例 2:

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

输出:[9,4]

解释:[4,9] 也是可通过的

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

解题思路

为了高效地找出交集,使用 集合(Set) 数据结构,它具有自动去重和高效查找的特性。

  1. nums1nums2 分别转换为集合 set1set2,从而去除数组中的重复元素,并提高查找效率。
  2. 使用 filter 方法遍历 set1 中的元素,检查每个元素是否同时存在于 set2 中。如果存在,则将该元素加入到最终结果中。最后,返回交集结果。
  3. 也可以使用 ES6 的 Set 交集操作符 .intersection(),可以进一步简化代码。

复杂度分析

  • 时间复杂度O(n + m),其中 nm 是两个数组的长度。
    • 构建 set1set2 的时间复杂度为 O(n + m)
    • filter 方法遍历 set1 的时间复杂度是 O(n)
    • 总的时间复杂度为 O(n + m)
  • 空间复杂度O(n + m),需要分别存储两个集合 set1set2

代码

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersection = function (nums1, nums2) {
	const set1 = new Set(nums1); // 去重并存储 nums1 中的元素
	const set2 = new Set(nums2); // 去重并存储 nums2 中的元素

	// 过滤出 set1 中存在于 set2 的元素
	return [...set1].filter((num) => set2.has(num));
	// 或者使用原生方法
	return [...set1.intersection(set2)];
};

相关题目

题号标题题解标签难度力扣
350两个数组的交集 II[✓]数组 哈希表 双指针 2+🟢🀄️open in new window 🔗open in new window
1213三个有序数组的交集 🔒数组 哈希表 二分查找 1+🟢🀄️open in new window 🔗open in new window
2085统计出现过一次的公共字符串[✓]数组 哈希表 字符串 1+🟢🀄️open in new window 🔗open in new window
2143在两个数组的区间中选取数字 🔒数组 动态规划🔴🀄️open in new window 🔗open in new window
2215找出两数组的不同[✓]数组 哈希表🟢🀄️open in new window 🔗open in new window
2248多个数组求交集数组 哈希表 计数 1+🟢🀄️open in new window 🔗open in new window
2540最小公共值数组 哈希表 双指针 1+🟢🀄️open in new window 🔗open in new window
3002移除后集合的最多元素数贪心 数组 哈希表🟠🀄️open in new window 🔗open in new window