求兩個陣列的交集 並集和差集演算法分析與實現

2021-10-24 05:10:27 字數 1855 閱讀 1818

一、陣列內資料無序且可以重複

本文採用一種交換的方式來求出兩個陣列的並集,交集和差集,這種演算法運算速度較快,記憶體消耗空間較少,是乙個值得學習的好方法,另外,作者提醒您,重要的不是演算法本身,而是該演算法會開拓我們的思維空間,要注意對問題的多思考。

演算法概述:

兩個任意元素的陣列,比較出兩個陣列中相同的元素和不同的元素。

元素劃分:

計算過程中,兩個陣列內部元素的劃分:

演算法流程:

從陣列1的尚未比較的元素中拿出第乙個元素array1(i),用array1(i)與array2(j)進行比較(其中j>i且j1.  陣列2中找到了乙個與array1(i)相等的元素,則將array2(j)與array2(i)進行交換,i加一,進行下次迭代

2.  陣列2直到結尾也沒找到與array1(i)相等的元素,則將array1(i)與

尚未進行比較的最後乙個元素array1(k)進行交換,i不加一,進行下次迭代。

演算法實現**:

#include

bool join(const int *arra, const int lena, const int *arrb, const int lenb, \

int *arrdst, int *len)

else if(arra[i] > arrb[j])

else 

}//交集的真實數目

*len = ncount;

return true;

}bool merge(const int *arra, const int lena, const int *arrb, const int lenb, \

int *arrdst, int *len)

else if(arra[i] > arrb[j])

else 

}while(i < lena) 

while(j < lenb) 

//並集的真實數目

*len = ncount;

return true;

}void print(const int *arr, const int len)

printf("\n\n");

}void main()

;int b = ;

int sizea = sizeof(a) / sizeof(a[0]);

int sizeb = sizeof(b) / sizeof(b[0]);

int i = 0;

int j = 0;

int len;

int *c = new int [sizea + sizeb];

printf("陣列a和b的交集:\n");

join(a, sizea, b, sizeb, c, &len);

print(c, len);

printf("陣列a和b的並集:\n");

merge(a, sizea, b, sizeb, c, &len);

print(c, len);

delete c;

printf("\n\n");

}三、3個已經排序的整數數列,找到common elements。

1)三個index指向三個數列開始,比較三者的值,若相等則找到乙個。若有兩個元素相等且較大,則較小的乙個index+;其他情況,較小的兩個index++。時間複雜度o(n),n小於等於最長的數列長度。

2)先找兩個陣列的common element,過程和歸併排序類似,然後看這個結果是否出現在陣列三中即可,用二分查詢。時間複雜度o(n),空間複雜度為o(1),如果是n個陣列,則可以採用敗者樹。(新學習的,呵呵)

JS陣列求並集,交集和差集

es7 filter結合includes 並集 let union a.concat b.filter v a.includes v 1,2,3,4,5 交集 let intersection a.filter v b.includes v 2 差集 let difference a.concat ...

python 兩個list 求交集,並集,差集

在python中,陣列可以用list來表示。如果有兩個陣列,分別要求交集,並集與差集,怎麼實現比較方便呢?當然最容易想到的是對兩個陣列做迴圈,即寫兩個for迴圈來實現。這種寫法大部分同學應該都會,而且也沒有太多的技術含量,本博主就不解釋了。這裡給大家使用更為裝bility的一些方法。老規矩,talk...

Linux 兩個檔案求交集 並集 差集

sort a.txt b.txt uniq dsort a.txt b.txt uniq在 a.txt 檔案 現,不在 b.txt 檔案 現 sort a.txt b.txt b.txt uniq u在 b.txt 檔案 現,不在 a.txt 檔案 現 sort b.txt a.txt a.txt ...