使用 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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.