求兩個有序整型陣列的交集

2021-07-03 03:40:39 字數 1013 閱讀 8404

有兩個有序的整型陣列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 都排過序,所以,每一...