给定两个数组,求交集
YuArtian opened this issue · 0 comments
YuArtian commented
给定两个数组,求交集
条件如题
例如:给定 nums1 = [1, 2, 2, 1],nums2 = [2, 2],返回 [2, 2]
给定 nums1 = [1, 1, 1],nums2 = [1],返回 [1]
-
解法1:
const intersect = (nums1, nums2) => { const map = {} const res = [] for (let n of nums1) { if (map[n]) { map[n]++ } else { map[n] = 1 } } for (let n of nums2) { if (map[n] > 0) { res.push(n) map[n]-- } } return res }
-
最优化解法
var intersect = function (nums1, nums2) { const process = function (nums) { return nums.reduce((obj,key) => { if (key in obj) { obj[key] ++ }else{ obj[key] = 1 } return obj },{}) } var num1Map = process(nums1) var num2Map = process(nums2) var ret = [] Object.keys(num1Map).forEach(key => { if (key in num1Map && key in num2Map) { ret.push(...Array(Math.min(num1Map[key], num2Map[key])).fill(key)) } }) return ret };