要计算两个数组的交集,可以使用多种方法。
下面是一个使用 Set
数据结构的高效实现:
使用 Set
数据结构
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]
实现要点:
将第一个数组转换为 Set
:
- 这样做的好处是
Set
提供了常数时间复杂度的查找操作,能够快速判断元素是否存在。
使用 filter
方法:
- 遍历第二个数组,检查每个元素是否存在于第一个数组的
Set
中。
说明:
如果需要去重,可以在返回结果前再使用 Set
对结果进行去重处理:
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
。