आइए मान लें कि हमने दो अवर्गीकृत सरणियाँ दी हैं 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} है।