zoukankan      html  css  js  c++  java
  • 利用哈希map快速判断两个数组的交集

    在大多数情况,也就是一般的情况下,大家都能想出最暴力的解法,通常也就是采用遍历或者枚举的办法来解决问题。

    该题需要找出两个数组的交集,最简单的一个办法就是用A数组里面的所有数去匹配B数组里面的数。假设两个数组的大小都是n,那么这种遍历的时间复杂度为O(n^2)。这个也是最复杂的情况了。

    但是我们可以想出用哈希函数或者哈希表来解决问题。也就是将数组A哈希到哈希表中,然后继续将数组B哈希到哈希表中,如果发生哈希碰撞则统计加1,最后可以得出数组的交集。时间复杂度也就是哈希所有元素的复杂度O(n)。

    直接上代码:

    import java.util.Hashtable;
    
    public class Test1 {
        public static void findSame(int a[],int b[]){
            //同样的KEY就会覆盖前面的VALUE.所以即使数组a中有重复值也没必要先排重。
            Hashtable<Integer,Integer> ht =new Hashtable<>();
            for(int i=0;i<a.length;i++){
                ht.put(a[i],a[i]);
            }
            for(int j=0;j<b.length;j++){
                if(ht.get(b[j])!=null){
                    System.out.print(b[j]+"   ");
                }
            }
        }
    
        public static void main(String[] args) {
            int a[]={1,2,2,3,3,4,5,6,7};
            int b[]={2,3};
            findSame(a,b);
        }
    }
  • 相关阅读:
    每日一题20180325
    Linux下MySQL表名区分大小写
    CentOS删除编译安装的Python3
    HTTPS配置
    测试 js 方法运行时间(转)
    使用dbutils进行批处理
    oracle生成主键
    JDBC学习笔记(10)——调用函数&存储过程(转)
    easyui Draggable
    blob
  • 原文地址:https://www.cnblogs.com/cat520/p/9378472.html
Copyright © 2011-2022 走看看