跳至主要內容

2215. 找出两数组的不同


2215. 找出两数组的不同open in new window

🟢   🔖  数组 哈希表  🔗 力扣open in new window LeetCodeopen in new window

题目

Given two 0-indexed integer arrays nums1 and nums2, return a listanswer of size 2 where:

  • answer[0] is a list of alldistinct integers in nums1 which arenot present in nums2.
  • answer[1] is a list of alldistinct integers in nums2 which arenot present in nums1.

Note that the integers in the lists may be returned in any order.

Example 1:

Input: nums1 = [1,2,3], nums2 = [2,4,6]

Output: [[1,3],[4,6]]

Explanation: For nums1, nums1[1] = 2 is present at index 0 of nums2, whereas nums1[0] = 1 and nums1[2] = 3 are not present in nums2. Therefore, answer[0] = [1,3].

For nums2, nums2[0] = 2 is present at index 1 of nums1, whereas nums2[1] = 4 and nums2[2] = 6 are not present in nums2. Therefore, answer[1] = [4,6].

Example 2:

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

Output: [[3],[]]

Explanation: For nums1, nums1[2] and nums1[3] are not present in nums2. Since nums1[2] == nums1[3], their value is only included once and answer[0] = [3].

Every integer in nums2 is present in nums1. Therefore, answer[1] = [].

Constraints:

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

题目大意

给你两个下标从 0 开始的整数数组 nums1nums2 ,请你返回一个长度为 2 的列表 answer ,其中:

  • answer[0]nums1 中所有 存在于 nums2 中的 不同 整数组成的列表。
  • answer[1]nums2 中所有 存在于 nums1 中的 不同 整数组成的列表。

注意: 列表中的整数可以按 任意 顺序返回。

示例 1:

输入: nums1 = [1,2,3], nums2 = [2,4,6]

输出:[[1,3],[4,6]]

解释: 对于 nums1 ,nums1[1] = 2 出现在 nums2 中下标 0 处,然而 nums1[0] = 1 和 nums1[2] = 3 没有出现在 nums2 中。因此,answer[0] = [1,3]。

对于 nums2 ,nums2[0] = 2 出现在 nums1 中下标 1 处,然而 nums2[1] = 4 和 nums2[2] = 6 没有出现在 nums2 中。因此,answer[1] = [4,6]。

示例 2:

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

输出:[[3],[]]

解释: 对于 nums1 ,nums1[2] 和 nums1[3] 没有出现在 nums2 中。由于 nums1[2] == nums1[3] ,二者的值只需要在 answer[0] 中出现一次,故 answer[0] = [3]。

nums2 中的每个整数都在 nums1 中出现,因此,answer[1] = [] 。

提示:

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

解题思路

可以通过使用集合来有效地找出在 nums1 中但不在 nums2 中的元素,以及在 nums2 中但不在 nums1 中的元素。

  1. 集合创建:使用 Set 来去重并存储 nums1nums2 的元素。
  2. 过滤独特元素
    • 对于 nums1,使用 filter 方法找出那些不在 set2 中的元素。
    • 对于 nums2,使用类似的方法找出那些不在 set1 中的元素。
  3. 返回结果:返回一个包含两个数组的列表,其中一个是 nums1 中独特的元素,另一个是 nums2 中独特的元素。

复杂度分析

  • 时间复杂度:O(n + m),其中 nm 分别是 nums1nums2 的长度。
  • 空间复杂度:O(n + m),用于存储集合。

代码

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[][]}
 */
var findDifference = function (nums1, nums2) {
	// 将 nums1, nums2 的元素分别存入集合
	const set1 = new Set(nums1);
	const set2 = new Set(nums2);

	// 过滤出只在 nums1 中的元素
	const answer1 = [...set1].filter((i) => !set2.has(i));
	// 过滤出只在 nums2 中的元素
	const answer2 = [...set2].filter((i) => !set1.has(i));

	return [answer1, answer2];
};

相关题目

题号标题题解标签难度
349两个数组的交集open in new window数组 哈希表 双指针 2+
350两个数组的交集 IIopen in new window数组 哈希表 双指针 2+
2248多个数组求交集open in new window数组 哈希表 计数 1+