हमें सकारात्मक पूर्णांकों की एक सरणी दी गई है। लक्ष्य arr[] के तत्वों के जोड़े की संख्या ज्ञात करना है जैसे कि जोड़े में तत्व (ए, बी) हों जहां ए की आवृत्ति बी गुना है और बी की आवृत्ति ए है।
आइए उदाहरणों से समझते हैं।
इनपुट - int arr[] ={ 3, 3, 3, 5, 5, 6, 6}
आउटपुट − एक सरणी में युग्मों की संख्या जैसे कि एक की आवृत्ति कम से कम दूसरे का मान हो − 1
स्पष्टीकरण - एक सरणी में मान्य जोड़े जहां ए बार बी बार होता है और बी बार होता है (3, 3) क्योंकि 3 एक सरणी में 3 बार होता है। तो केवल एक वैध जोड़ी है इसलिए गिनती 1 है।
इनपुट - int arr[] ={ 3, 3, 3, 3, 3, 5, 5, 5, 6, 6}
आउटपुट − एक सरणी में युग्मों की संख्या जैसे कि एक की आवृत्ति कम से कम दूसरे का मान हो − 1
स्पष्टीकरण - एक सरणी में मान्य जोड़े जहां ए होता है बी बार होता है और बी होता है ए बार होता है (3, 3), (5, 5) और (3, 5) क्योंकि 3 5 बार होता है और 5 एक सरणी में 3 बार होता है . तो तीन वैध जोड़े हैं इसलिए गिनती 3 है।
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
दृष्टिकोण में हम पहले सरणी के तत्वों की आवृत्तियों वाले एक अनियंत्रित मानचित्र को बनाएंगे और पॉप्युलेट करेंगे। लूप के लिए unordered_map का उपयोग करके ट्रैवर्स करें। प्रत्येक तत्व और उसकी आवृत्ति के लिए, यदि कोई आवृत्ति अधिक पाई जाती है, तो जोड़े की संख्या में वृद्धि करें।
-
पूर्णांकों की एक सरणी गिरफ्तारी [] लें।
-
फंक्शन फ़्रीक्वेंसी_दर_वैल्यू (इंट एआर [], इंट साइज़) एरे और उसका आकार लेता है और जोड़े की गिनती देता है जैसे कि जोड़े (ए, बी) होते हैं जहां ए कम से कम बी बार होता है और इसके विपरीत।
-
प्रारंभिक गणना 0 के रूप में लें।
-
arr[] के तत्वों और उनकी आवृत्तियों के लिए unordered_map
um लें। -
जोड़ी start=it.second के प्रत्येक प्रथम मान के लिए और उसके लिए उपयोग करते हुए ट्रैवर्स मानचित्र; (it=iterator), फ़्रीक्वेंसी के लिए ट्रैवर्स मैप>=लूप के लिए इस्तेमाल करना शुरू करें।
-
ऐसे जोड़ियों के लिए वेतन वृद्धि की संख्या।
-
परिणाम के रूप में वापसी की गिनती।
उदाहरण
#include <bits/stdc++.h> using namespace std; int frequency_other_value(int arr[], int len){ int count = 0; unordered_map<int, int> um; for (int i = 0; i < len; ++i){ um[arr[i]]++; } for (auto it : um){ int start = it.first; int end = it.second; for (int j = 1; j <= end; j++){ if (um[j] >= start){ count++; } } } return count; } int main(){ int arr[] = { 3, 3, 3, 5, 5, 6, 6}; int size = sizeof(arr) / sizeof(arr[0]); cout<<"Count of pairs in an array such that frequency of one is at least value of other are: "<<frequency_other_value(arr, size); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Count of pairs in an array such that frequency of one is at least value of other are: 1