两个数组的交集 JavaScript
我们有两个数字数组,我们需要编写一个函数(比如 intersection())来计算它们的交集,并返回一个包含按任意顺序相交元素的数组。结果中的每个元素都应该按其在两个数组中出现的次数出现。
例如,如果,
Input: arr1 = [1,2,3,1], arr2 = [1,3,1] Output: [1,3,1]
方法
如果数组已排序,我们可以使用双指针方法,其中两个指针最初都指向各个数组的开头 0,并且我们可以继续增加相应的指针,这将是 O(m+n) 复杂度的时间,其中 m 和 n 是数组的大小。
但是,由于我们有未排序的数组,所以对数组进行排序然后使用此方法没有任何逻辑,我们将检查第一个值与第二个值的每一对,并构造一个交集数组。这会花费我们 O(n^2) 的时间。
完成此操作的代码如下 −
示例
const arr1 = [1, 2, 43, 5, 3, 7, 7,8, 4, 2]; const arr2 = [1, 1, 6, 6, 2, 78, 7, 2, 3, 7, 23, 5, 3]; const intersection = (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(intersection(arr1 ,arr2));
输出
控制台中的输出将是 −
[1, 2, 5, 3, 7, 7, 2]
广告