Skip to content

给定两个数组,写一个方法来计算它们的交集?

要计算两个数组的交集,可以使用多种方法。

下面是一个使用 Set 数据结构的高效实现:

使用 Set 数据结构

javascript
function intersection(arr1, arr2) {
  // 将第一个数组转换为 Set
  const set1 = new Set(arr1);
  
  // 使用 filter 方法过滤出存在于 set1 中的元素
  return arr2.filter(item => set1.has(item));
}

// 使用示例
const array1 = [1, 2, 2, 1];
const array2 = [2, 2];
const result = intersection(array1, array2);
console.log(result); // 输出 [2, 2]

实现要点

  1. 将第一个数组转换为 Set

    • 这样做的好处是 Set 提供了常数时间复杂度的查找操作,能够快速判断元素是否存在。
  2. 使用 filter 方法

    • 遍历第二个数组,检查每个元素是否存在于第一个数组的 Set 中。

说明

  • 如果需要去重,可以在返回结果前再使用 Set 对结果进行去重处理:

    javascript
    function intersection(arr1, arr2) {
      const set1 = new Set(arr1);
      return [...new Set(arr2.filter(item => set1.has(item)))];
    }

    这样会确保交集结果中每个元素唯一。

复杂度

  • 时间复杂度:O(n + m),其中 n 和 m 分别是两个数组的长度。
  • 空间复杂度:O(n) 或 O(m),取决于哪一个数组转换为 Set