- 求两个数组的交集,根据leetcode的解析,用过双指针的方法,但是双指针的话数据多的话后台运行会有问题,所以这里总结一下哈希算法的解法
var intersect = function (nums1, nums2) {
let arr = []
let newMap = new Map()
for (let i of nums1) {
//newMap.set()方法是存储两个值,一个是数组的数值和数值出现的次数
//newMap(i)+1||1 为有存在的值则加1 只存在一次则为1
newMap.set(i, newMap.get(i) + 1 || 1)
console.log(i) //1 3 5 5 7 2 2 2 对应输出,可进行查看
console.log(newMap.get(i) + 1) //1 1 1 2 1 1 2 3
}
//遍历第二个数组
for (let i of nums2) {
if (newMap.get(i)) //判断存储的数值是否存在
arr.push(i)
newMap.set(i, newMap.get(i) - 1) //判断一次数值的次数就减一次
}
return arr
};
console.log(intersect([1, 3, 5, 5, 7, 2, 2, 2], [1, 2, 2, 3]))