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