使用 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}。
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP