leetcode题解两个数组的交集

 

两个数组的交集 II-350

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

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

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
复制代码

来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/in…

首先遍历第一个数组,并在map中记录第一个数组中的每个数字以及对应出现的次数,然后遍历第二个数组,对于第二个数组中的每个数字,如果在哈希表中存在这个数字,则将该数字添加到答案,并减少哈希表中该数字出现的次数。

时间复杂度:O(m+n),其中 m 和 n 分别是两个数组的长度。

 
/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
 var intersect = function(nums1, nums2) {
    let map=new Map();
    let num;
    let result=[];
    for (let i=0; i<nums1.length; i++){//用map存储nums1中num -> count 的键值对,统计每个数字出现的数量。
        num=nums1[i];
        let count=map.get(num);
        if(map.has(num)){
            map.set(num,count+1);
        }
        else{
            map.set(num,1)
        }
    }
    for(let i=0;i<nums2.length;i++){
        num=nums2[i];
        let count=map.get(num);//获取出现的次数
        if(map.has(num) && count>=1){
            map.set(num,count-1);
            result.push(num);
        }
        
    }
    return result;

};
阅读剩余
THE END