上班的地铁上我默默的打开了掘金刷了起来,看到一个up主分享了一篇关于数组求交集的文章,我看完之后总结四个字花里胡俏,然后到公司自己写了一下分享一下。
原up主代码:
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
let intersect = function (nums1, nums2) {
let map1 = makeCountMap(nums1)
let map2 = makeCountMap(nums2)
let res = []
for (let num of map1.keys()) {
const count1 = map1.get(num)
const count2 = map2.get(num)
if (count2) {
const pushCount = Math.min(count1, count2)
for (let i = 0; i < pushCount; i++) {
res.push(num)
}
}
}
return res
}
function makeCountMap(nums) {
let map = new Map()
for (let i = 0; i < nums.length; i++) {
let num = nums[i]
let count = map.get(num)
if (count) {
map.set(num, count + 1)
} else {
map.set(num, 1)
}
}
return map
}
我自己的:
/**
* @param {number[]} target1
* @param {number[]} target2
* @return {number[]}
*/
function methods(target1, target2) {
if (
{}.toString.call(target1) !== "[object Array]" ||
{}.toString.call(target2) !== "[object Array]"
)
throw new Error("数据类型不对");
let realArray = [];
for (let item of target1) {
if (target2.includes(item)) {
realArray.push(item);
}
}
let set = new Set(realArray);
return [...set];
}
我实现的整体思路就是遍历一个目标数组,然后拿里面的每一个item去判断一下,第二个目标数组里面是否有,有就push压入一个新数组中,然后利用new Set()去重,再return的出来,小弟不才献丑了。