C++中計算第一個陣列中存在但在第二個陣列中不存在的元素個數
給定一個包含整數元素的任意大小的陣列,任務是計算在第一個陣列中存在但在第二個陣列中不存在的元素個數。
陣列是一種資料結構,可以儲存大小固定的相同型別元素的順序集合。陣列用於儲存資料集合,但通常將陣列視為相同型別變數的集合更有用。
例如
Input− int arr_1[] = {1, 2, 3, 4} Int arr_2[] = {1, 5, 6, 7, 8} Output − count is 3
解釋 − 在給定的arr_1中,我們有元素1、2、3和4,在arr_2中,我們有1、5、6、7和8。元素1同時存在於兩個陣列中,因此我們不會計算它,因此計數變為3。
Input − int arr_1[] = {10, 20, 30, 40, 50} Int arr_2[] = {10, 20, 30, 60} Output − count is 2
解釋 − 在給定的arr_1中,我們有元素10、20、30、40和50,在arr_2中,我們有10、20、30和60。元素10、20和30同時存在於兩個陣列中,因此我們不會計算它們,因此計數變為2。
下面程式中使用的方法如下
建立兩個陣列,例如,arr_1[]和arr_2[]
使用length()函式計算兩個陣列的長度,該函式將根據陣列中的元素返回整數值。
取一個臨時變數來儲存僅在第一個陣列中存在的元素個數。
建立一個無序對映,例如up
啟動迴圈,i從0開始,直到i小於arr_1的大小
將up[arr_1[i]]加1
啟動另一個迴圈,i從0開始,直到i小於arr_2的大小
在迴圈內,檢查up.find(arr_2[i])!=up.end()並且up[arr_2[i]]!=0是否成立
將up[arr_2[i]]減1
啟動另一個迴圈,i從0開始,直到i小於arr_1的大小
在迴圈內,檢查up[arr_1[i]!=0是否成立
然後,將計數加1並將up[arr_1[i]]設定為0
返回計數
列印結果。
示例
#include <iostream> #include<unordered_map> using namespace std; int elements_count(int arr_1[], int arr_2[], int m, int n){ bool f = false; int result = 0; // map to store frequency of elements present in a unordered_map<int, int> up; for (int i = 0; i < m; i++){ up[arr_1[i]]++; } // check if the elements of b // is present in b or not for (int i = 0; i < n; i++) if (up.find(arr_2[i]) != up.end() && up[arr_2[i]] != 0){ up[arr_2[i]]--; } // count the elements of a whose // frequency is more than b for (int i = 0; i < m; i++) { if (up[arr_1[i]] != 0){ result++; up[arr_1[i]] = 0; } } return result; } // Main function int main(){ int arr_1[] = { 2, 4, 4, 6, 6, 6, 8, 9 }; int arr_2[] = { 2, 2, 4, 6, 6 }; int m = sizeof(arr_1)/sizeof(arr_1[0]); int n = sizeof(arr_2)/sizeof(arr_2[0]); cout <<"count is "<<elements_count(arr_1, arr_2, m, n); return 0; }
輸出
如果我們執行上述程式碼,我們將得到以下輸出:
count is 4
廣告