• 两个数组的交集 II


    题纲 

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

    示例 :

    输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    输出: [4,9]

    说明:

    • 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
    • 我们可以不考虑输出结果的顺序。

    方法1:

    这种方法原则上比较暴力对所有的数都进行了一次遍历比较,同时清空了对比数组中当前对比相同的值,以防重复检测
    /*
    * * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */ var intersect = function(nums1, nums2) { var arr = []; for(var i=0;i<nums1.length;i++){ for(var j=0;j<nums2.length;j++){ if(nums1[i] === nums2[j]) { arr.push(nums1[i]) nums2[j]=null; break; } } } return arr; };

     方法二:

    这个方法是在做完方法一以后想到的优化方法 
      方法一在两个对比数组基数大了以后需要循环的次数成指数上升,
      方法二 则使用一个对象作为中间存储变量,将其中一个作为参照的数组映射入对象中,
          以数组的值为KEY,对象值是这个映射进去的数组key在数组中出现的次数,
          再循环对比数组去取obj中是否有这个key有则说明相同,将该key的值减一,以此类推
    /*
    * * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */ var intersect = function(nums1, nums2) { var arr = [], obj = {}; for(var i=0;i<nums1.length;i++){ if(obj[nums1[i]]){ obj[nums1[i]] = obj[nums1[i]]+1 }else{ obj[nums1[i]] = 1; } } for(var j=0;j<nums2.length;j++){ if(obj[nums2[j]]) { arr.push(nums2[j]); obj[nums2[j]] = obj[nums2[j]]-1; } } return arr; };

     方法三 

    /**
     * @param {number[]} nums1
     * @param {number[]} nums2
     * @return {number[]}
     */
    var intersect = function(nums1, nums2) {
        
        
        var arr = [];
        
       nums1.forEach(item=>{
           let a = nums2.indexOf(item);
           if(a>-1){
               arr.push(item)
               nums2[a] = null
           }
       })
        
        return arr;
        
        
    };  

    进阶:

    • 如果给定的数组已经排好序呢?你将如何优化你的算法?
    • 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
    • 如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?
  • 相关阅读:
    Django REST framework
    Docker学习11-sonarqube+jenkins持续集成代码审计(下)
    Docker学习10-sonarqube+jenkins持续集成代码审计(上)
    jmeter-4-linux下环境搭建 jmeter+ant+docker-jenkins,持续集成测试完成
    jmeter-3-linux下环境搭建jmeter+ant
    jmeter-2-ant+jenkins持续集成测试
    jmeter-1-apache ant-集成测试
    python-50-pip加速与pip包虚拟环境管理
    git-基本操作
    创建 PHP Composer 包并使用的操作指南
  • 原文地址:https://www.cnblogs.com/jjq-exchange/p/11124508.html
Copyright © 2020-2023  润新知