利用哈希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);
    }
}

 

posted @ 2018-07-27 16:46  会偷袭的猫  阅读(1798)  评论(0编辑  收藏  举报