zoukankan      html  css  js  c++  java
  • 两个数组的交集 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 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?
  • 相关阅读:
    数据库的架构和优化
    描述一个高性能高可靠的网站架构——如何设计一个秒杀系统
    PHP手册-函数参考-加密扩展
    系统性能指标总结
    PHP实现负载均衡的加权轮询
    PHP生成二维码
    高性能网站架构
    PHP实现Redis的数据结构和LFU/LRU
    缓存的设计及PHP实现LFU
    网络开发库从libuv说到epoll
  • 原文地址:https://www.cnblogs.com/jjq-exchange/p/11124508.html
Copyright © 2011-2022 走看看