两个数组的交集II
一、LeetCode题解
瞧一瞧~
- 博健的LeetCode题解:Gitbook版本传送门
- 博健的LeetCode题解:CSDN传送门
- 前端进阶笔记:Gitbook传送门
二、算法题
题目
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。
解法一(短数组比对)
思路:
找到最短数组
,因为交集的最大边界为短数组的长度- 短数组中的元素与长数组匹配到,要在长数组中
移除
(因为这道题需要一一对应,每个元素仅可配对一次) - 移除的元素(匹配到且仅匹配了一次)添加进
新数组中并返回
即可
var intersect = function(nums1, nums2) {
var arrShort = nums1.length > nums2.length ? nums2 : nums1
var arrLarge = nums1.length > nums2.length ? nums1 : nums2
var res = []
for(let i = 0; i < arrShort.length; i++){
let idx = arrLarge.indexOf(arrShort[i])
if(idx >= 0){
res.push(arrLarge[idx])
arrLarge.splice(idx, 1)
}
}
return res
};