使用 C++ 统计两个数组中的元素


假设我们有两个未排序的数组 arr1[] 和 arr2[]。任务是计算 arr2[] 中元素的总数,其中 arr1[] 中的每个元素都小于或等于 arr2[] 中存在的元素。但是,两个数组中的元素也可能包含重复项。

例如,

输入 1

N = 6
M = 7
arr1[N] = {1, 2, 5, 0, 6, 3}
arr2[M] = {0,0,1,2,1,3,4,6,8}

输出

4 5 7 2 8 6

解决此问题所采用的方法

为了计算 arr1[] 的每个元素并检查它们是否小于或等于 arr2[] 中的元素,我们的想法是对 arr2[] 进行排序,并使用二分查找方法查找 arr1[] 中小于或等于 arr2[] 中存在的元素的元素。

  • 输入 arr1 和 arr1 的大小分别为 'm' 和 'n'。

  • 输入数组元素。

  • 函数 countInSecond(int *arr1, int *arr2, int m, int n) 以两个数组及其大小作为输入,并返回 arr2[] 中存在的元素的计数。

  • 对 arr2[] 进行排序。

  • 遍历 arr1[] 并使用二分查找在 arr2[] 中查找特定元素。

  • 返回小于或等于的元素的计数。

示例

 实时演示

#include <bits/stdc++.h>
using namespace std;
void countInSecond(int *nums1,int *nums2,int m,int n){
   sort(nums2, nums2+n);
   int i=0;
   for(int i=0;i<m;i++){
      int s=0;
      int e=n-1;
      while(s<=e){
         int mid= (s+e)/2;
         if(nums2[mid]<=nums1[i])
            s= mid+1;
         else
            e= mid-1;
      }
      cout<<e+1<<" ";
   }
}
int main(){
   int m=6;
   int n=9;
   int arr1[m]={1,2,5,0,6,3};
   int arr2[n]= {0,0,1,2,1,3,4,6,8};
   countInSecond(arr1,arr2,m,n);
   return 0;
}

输出

运行以上代码将生成以下输出:

4 5 7 2 8 6

arr1 中所有小于或等于 arr2 中元素的元素的计数为 {4 5 7 2 8 6}。

更新于: 2021年2月5日

558 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告