查找字符串数组的交集 - JavaScript
javascriptweb developmentfront end technologyobject oriented programming更新于 2025/12/15 6:36:17
我们有两个数字数组,我们需要编写一个函数,假设为intersection(),它计算它们的交集并返回一个包含相交元素的数组,该元素的顺序任意。结果中的每个元素应出现的次数应与它在两个数组中显示的次数相同。
例如−
如果输入是−
arr1 = ['hello', 'world', 'how', 'are', 'you']; arr2 = ['hey', 'world', 'can', 'you', 'rotate'];
那么输出应该是 −
输出:['world', 'you'];
方法
如果数组已经排序,我们可以使用双指针方法,最初两个指针都指向 0 即各自数组的开头,然后我们可以继续增加相应的指针,这将是 O(m+n) 复杂度。时间,其中 m 和 n 是数组的大小。
但由于我们的数组是未排序的,因此对数组进行排序没有任何逻辑,然后使用这种方法,我们将检查第一个值与第二个值的每个值,并构造一个交集数组。这将花费我们 O(n^2) 的时间。
示例
以下是代码 −
arr1 = ['hello', 'world', 'how', 'are', 'you'];
arr2 = ['hey', 'world', 'can', 'you', 'rotate'];
const intersectElements = (arr1, arr2) => {
const res = [];
const { length: len1 } = arr1;
const { length: len2 } = arr2;
const smaller = (len1 < len2 ? arr1 : arr2).slice();
const bigger = (len1 >= len2 ? arr1 : arr2).slice();
for(let i = 0; i < smaller.length; i++) {
if(bigger.indexOf(smaller[i]) !== -1) {
res.push(smaller[i]);
bigger.splice(bigger.indexOf(smaller[i]), 1, undefined);
}
};
return res;
};
console.log(intersectElements(arr1, arr2));
输出
这将在控制台中产生以下输出 −
[ 'world', 'you' ]
相关文章
有用资源
javascript 参考教程 - 该教程包含有关 javascript 的更多信息:https://www.cainiaomax.com/javascript/

