有兩個有序的整型陣列a和b(沒有重複元素),他們的長度分別為lena和lenb,求出他們的共同元素。
例如:a = 0,1,3,5,7,9,11;b = 2,3,4,7,11;
它們的交集為。
求交集的方法有很多種,但陣列的長度會影響演算法的效率。
2.1.1 二路歸併
對於陣列a,b分別以i,j從頭遍歷陣列。如果當前位置的a[i]等於b[j],則這兩個數是兩個陣列的乙個交集,記錄下來並繼續遍歷;如果a[i]大於b[j],則繼續遍歷陣列b,否則遍歷陣列a。**如下:
//二路歸併法
int comnun_merge(int a,int lena,int b,int lenb,int *comlst)
else
if(a[i] > b[j])
else
i++;
}return k;
}
2.1.2 雜湊查詢
迴圈遍歷其中的乙個陣列,並將元素存放到雜湊表中,然後遍歷另乙個陣列,並進行hash查詢。如果存在,則是兩個陣列的乙個交集,記錄下來,繼續查詢直到結束。
//雜湊表查詢法,此方法可無序,但要求元素為正數
int comnum_hash(int a,int lena,int b,int lenb,int *comlst)
,i,j,k=0;
for(i = 0; i < lena; i++)
hashtb[a[i]] = 1;
for(j = 0; j < lenb; j++)
return k;
}
在這種情況下,可以考慮使用二分查詢法。先遍歷長度較小的陣列,然後將這個元素值在在長度較大的陣列中進行二分查詢。
//二分查詢法
int comnum_binary(int a,int lena,int b,int lenb,int *comlst)}}
return k;
}
如何計算兩個有序整型陣列的交集
例如兩個含有n個元素的有序 非降序 整型陣列a和b 陣列a與b中都沒有重複元素 求出其共同元素,a 0,1,2,3,4 b 1,3,5,7,9 那麼它們的交集為。計算陣列交集可以採用很多種方法,但陣列的相對大小一般會影響演算法的效率,所以需要根據兩個陣列的相對大小來確定採用的方法 1 對於兩個陣列長...
兩個有序集合求交集
方案一 暴力法,for for,時間複雜度o n n 當資料量很大時,不可取 方案二 拉鍊法 有序集合1 有序集合2 兩個指標指向首元素,比較元素的大小 1 如果相同,放入結果集,隨意移動乙個指標 2 否則,移動值較小的乙個指標,直到隊尾 這種方法的好處是 1 集合中的元素最多被比較一次,時間複雜度...
求兩個陣列的交集
問題 給你兩個排序的陣列,求兩個陣列的交集。比如 a 1 3 4 5 7,b 2 3 5 8 9,那麼交集就是 3 5.思路 1.每一次從b陣列中取一值,然後在a陣列裡逐個比較,如果有相等的,則儲存。該演算法複雜度為 o mn m,n 分別為陣列 a b 的長度。2.因為a b 都排過序,所以,每一...