数据结构和算法—如何快速求组两个数组的交集

如何快速求两个数组的交集?

现有数组A、B ,数组长度分别为M、N,并且都是未排序的,如何快速两个数组的交集


说明:对于求数据交集的问题,那么每一个数组中可能会有重复元素,但是重复元素对求交集其实没有太大意义。

思路一:

              采用一个set 去存储一个数组,假定为A,然后用再从set中逐个查找B的元素。查到了就放入交集数组。

              当然采用哈希(hash_set)的的方式也能达到同样的效果。

              说明: 在STL中,set是以红黑树(RB-tree)作为底层数据结构,在时间复杂度为O(logN)情况下插入、删除和查找数据,hash_set操作的时间复杂度则比较复杂,这                 取决于哈希函数和哈希表的负载情况。一般来说,查询的数据量越大,hash_set的性能优势越明显。

              时间复杂度:O(Mlog(n))

             空间复杂度:o(min(M,N))


思路二:

             去长度小的数组A排序,对大数组B,直接用二分查找。

             时间复杂度:O(mlog(n))

              

思路三:(受限方法)

            如果知道元素上限为MaxElem,那么可以用bitset,对两个数组建立两个bitset,然后将两个bitset求与,得到的就是两个数组的交集。

            时间复杂度为O(m+n),空间复杂度为(MaxElem/8)。

            缺点:很明显,如果A只有两个元素(1,INT_MAX)那么这个方法就太糟糕了。

        

你可能感兴趣的:(数据结构与算法)