在大多數情況,也就是一般的情況下,大家都能想出最暴力的解法,通常也就是采用遍歷或者枚舉的辦法來解決問題。
該題需要找出兩個數組的交集,最簡單的一個辦法就是用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); } }