使用陣列和資料結構可以在多個記憶體位置上儲存同質(相同)資料。使用陣列的主要優點是我們可以透過使用索引參數從任何地方存取它們。資料必須按順序添加和刪除的事實將這種資料結構轉換為線性結構。要從陣列中檢索元素,我們只需要使用方括號內的索引或位置號碼。在本文中,我們將使用C 來取得兩個陣列中僅存在的共同元素。
Given first array A = [10, 14, 65, 85, 96, 12, 35, 74, 69] Given second array B = [23, 65, 89, 96, 12, 37, 71, 69] The common elements in arrays A and B are [65, 96, 12, 69]
在第一個陣列中,有九個元素,在第二個陣列中,有八個元素。所以這兩個陣列的大小可能不相同。我們的任務是找出這兩個陣列之間的共同元素。在這裡,我們將看到一些解決這個問題的技巧。
第一種也是最常見的解決方案是透過循環遍歷第一個數組的每個元素,並對於第一個數組的每個條目在第二個數組中進行搜尋。這種解決方案效率不高,但是更簡單。讓我們看一下演算法和相應的實作。
將兩個陣列A和B作為輸入
定義另一個陣列 D 來保存所有重複的元素
#對於A中的每個元素e1,執行以下操作
對於B中的每個元素e2,執行以下操作
如果 e1 = e2,則
將 e1 插入 D 中
結束如果
結束迴圈
結束迴圈
返回 D
#include <iostream> # define Z 50 using namespace std; void displayArr(int arr[], int n){ for( int i = 0; i < n; i++ ){ cout << arr[ i ] << ", "; } cout << endl; } void findCommonElement( int A[], int n, int B[], int m, int D[], int &k ) { k = 0; for( int i = 0; i < n; i++ ) { for( int j = 0; j < m; j++ ) { if( A[ i ] == B[ j ] ) { D[ k ] = A[ i ]; k = k + 1; } } } } int main() { int A[ Z ] = { 10, 14, 65, 85, 96, 12, 35, 74, 69 }; int n = 9; int B[ Z ] = { 23, 65, 89, 96, 12, 37, 71, 69 }; int m = 8; int D[ Z ]; int k = 0; cout << "Given first array A: "; displayArr( A, n ); cout << "Given second array B: "; displayArr( B, m ); findCommonElement( A, n, B, m, D, k ); cout << "The common elements are: "; displayArr( D, k ); }
Given first array A: 10, 14, 65, 85, 96, 12, 35, 74, 69, Given second array B: 23, 65, 89, 96, 12, 37, 71, 69, The common elements are: 65, 96, 12, 69,
使用C STL,set_intersection()函數傳回公共元素作為迭代器物件。但是要使用此函數,我們必須將陣列按升序排序。讓我們來看看演算法和C 實作程式碼。
將兩個陣列A和B作為輸入
定義另一個陣列 D 來保存所有重複的元素
#為重複元素數組建立一個迭代器
使用 set_intersection() 方法將 A 和 B 陣列進行交集運算,並將結果儲存在 D 陣列中
#返回 D
#include <iostream> #include <algorithm> #include <vector> # define Z 50 using namespace std; void displayArr( vector<int> v ){ for( int i = 0; i < v.size() ; i++ ){ cout << v[ i ] << ", "; } cout << endl; } vector<int> findCommonElement( vector<int> A, vector<int> B ) { sort( A.begin(), A.end() ); sort( B.begin(), B.end() ); vector<int> duplicates; vector<int> D( A.size() + B.size() ); vector<int>::iterator Dit, st; Dit = set_intersection( A.begin(), A.end(), B.begin(), B.end(), D.begin() ); for( st = D.begin(); st != Dit; ++st ) duplicates.push_back( *st ) ; return duplicates; } int main() { vector<int> A = { 10, 14, 65, 85, 96, 12, 35, 74, 69 }; vector<int> B = { 23, 65, 89, 96, 12, 37, 71, 69 }; vector<int> D; cout << "Given first array A: "; displayArr( A ); cout << "Given second array B: "; displayArr( B ); D = findCommonElement( A, B ); cout << "The common elements are: "; displayArr( D ); }
Given first array A: 10, 14, 65, 85, 96, 12, 35, 74, 69, Given second array B: 23, 65, 89, 96, 12, 37, 71, 69, The common elements are: 12, 65, 69, 96,
在本文中,我們看到了兩種從元素集合或兩個陣列中找到公共元素的方法。第一種樸素的解決方案是使用兩個靜態數組,透過逐一掃描每個元素來找到公共元素。此解的時間複雜度為O(n.m),其中n是第一個陣列的大小,m是第二個陣列的大小。下一種方法使用了基於C STL的set_intersection()方法。在這種方法中,我們需要使用排序後的向量。然後,該方法傳回一個公共元素迭代器物件。我們可以從中創建一個向量並返回它。
以上是C++程式從兩個陣列中找出公共元素的詳細內容。更多資訊請關注PHP中文網其他相關文章!