计算在第一个数组中出现的元素,但在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()函数计算两个数组的长度,该函数将根据数组中的元素返回一个整数值。

  • 采取一个临时变量,该变量将存储仅在第一个数组中存在的元素计数。

  • 说出创建无序映射的方法

  • 从i到0开始循环,直到我小于arr_1的大小

  • 以1递增[arr_1 [i]]

  • 从i到0开始另一个循环,直到我小于arr_2的大小

  • 在循环内,检查up.find(arr_2 [i])!= up.end()和up [arr_2 [i]]!= 0

  • 减少[arr_2 [i]] 1

  • 从i到0开始另一个循环,直到我小于arr_1的大小

  • 在循环内部,检查是否向上[arr_1 [i]!= 0

  • 然后,将计数增加1并设置[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;
   //的元素的频率
   unordered_map<int, int> up;
   for (int i = 0; i < m; i++){
      up[arr_1[i]]++;
   }
   //检查b的元素
   //b中是否存在
   for (int i = 0; i < n; i++)
   if (up.find(arr_2[i]) != up.end() && up[arr_2[i]] != 0){
      up[arr_2[i]]--;
   }
   //的元素
   //频率大于b-
   for (int i = 0; i < m; i++) {
      if (up[arr_1[i]] != 0){
         result++;
         up[arr_1[i]] = 0;
      }
   }
   return result;
}
//主要功能
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