【每日一题】求两个数组的交集

87 阅读1分钟

要求:给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]

示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
解释: [4,9] 也是可通过的

题解1

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
function makeCountMap(nums){
    let map = new Map()
    for(let i = 0; i < nums.length; i++){
        let count = map.get(nums[i])
        if(count){
            map.set(nums[i],count+1)
        } else {
            map.set(nums[i],1)
        }
    }
    return map
}
var intersection = function(nums1, nums2) {
    let map1 = makeCountMap(nums1)
    let map2 = makeCountMap(nums2)
    let res = []

    for(let num of map1.keys()){
        const count2 = map2.get(num)
        if(count2){
            res.push(num)
        }
    }
    return res
};

官方题解:

const set_intersection = (set1, set2) => {
    if(set1.size > set2.size){
        return set_intersection(set2, set1)
    } 
    const intersection = new Set()
    for(const num of set1){
        if(set2.has(num)){
            intersection.add(num)
        }
    }
    return [...intersection]
}

var intersection = function(num1, num2){
    const set1 = new Set(num1)
    const set2 = new Set(num2)
    
    return set_intersection(set1, set2)
}