查找字符串数组的交集 - JavaScript
我们有两个数字数组,我们需要编写一个函数,例如intersection(),它计算它们的交集并返回一个包含交集元素的数组(顺序任意)。结果中的每个元素出现的次数应与其在两个数组中出现的次数相同。
例如:
如果输入是:
arr1 = ['hello', 'world', 'how', 'are', 'you']; arr2 = ['hey', 'world', 'can', 'you', 'rotate'];
那么输出应该是:
Output: ['world', 'you'];
方法
如果数组已排序,我们可以使用双指针方法,初始时两个指针都指向各自数组的开头,然后我们可以继续增加相应的指针,这将使时间复杂度为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' ]
广告