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

更新于:2020年5月15日

浏览量:103

启动您的职业生涯

完成课程后获得认证

开始
广告