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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM