• js 取两数字数组交集


    今天刷LeetCode发现了数组交集的问题,平时工作也都用的非常普遍。所以特别留意了,两个数字数组的交集,有两题

    1.交集数组不包含重复数字

    2.交集数组包含重复数字

    第一题:先给两个数组分别去重,然后再双循环遍历比较,自己想的比较low,参考discuss大神写的https://leetcode.com/submissions/detail/193703614/

    大概就是先遍历其中一个数组,遍历到每个元素当做属性存入对象,继续遍历第二个数组对比这个对象的属性,存在即存入结果返回

    代码如下:

    var intersection = function(nums1, nums2) {
        const nums1Hash = {}
        const resultArr = []
        nums1.forEach(i => nums1Hash[i] = true)
        nums2.forEach(i => {
            if (nums1Hash[i] === true) {
                resultArr.push(i)
                nums1Hash[i] = false
            }
        })
        return resultArr
    };

    第二题:我使用的方法和第一题一样,只不过对象的值不是bool值,而是通过对象值计数。这样就不会遗漏重复的数字了,没想到一瞧discuss,总有大神。https://leetcode.com/submissions/detail/193705336/

    代码如下:

    使用数组的reduce,不断归并数组,达到遍历比较的目的

    var intersect = function(nums1, nums2) {
        if(nums1.length > nums2.length){
            //swap values
            [nums1, nums2] = [nums2, nums1];
        }
        
        const map = nums1.reduce((map, val) => {
            map[val] = (map[val] || 0) + 1;
            return map;
        }, {});
        
        // console.log(map);
        
        return nums2.reduce((res, val) => {
            if(map[val] && map[val] > 0){
                res.push(val);
                map[val]--;
            }
            return res;
        }, []);
    };
  • 相关阅读:
    程序员最艰难的十大任务
    ssh(安全外壳协议)
    数据库备份 计划任务
    计划任务 crontab
    数据库设计二
    mysql存储过程详解[转]
    Java开发必装的IntelliJ IDEA插件
    SQLYog快捷键大全
    HTTP深入浅出 http请求
    浏览器HTTP请求分析
  • 原文地址:https://www.cnblogs.com/xingguozhiming/p/10080304.html
Copyright © 2020-2023  润新知