इस समस्या में, हमें एन पूर्णांक मानों से युक्त एक सरणी गिरफ्तारी [] दी जाती है। हमारा काम पहला तत्व खोजने के लिए एक प्रोग्राम बनाना है जो किसी सरणी में सम संख्या में बार-बार दिखाई देता है . यदि कोई तत्व मौजूद है जो शर्त को पूरा करता है तो उसे वापस कर दें अन्यथा -1 लौटाएं गलत ।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
Input: arr[] = {2, 3, 7, 2, 3, 6, 4, 1, 2} Output: 3
समाधान दृष्टिकोण
समस्या को हल करने का एक सरल तरीका है, सरणी के प्रत्येक तत्व पर एक-एक करके विचार करना और फिर तत्व की घटना आवृत्ति की जाँच करना और सरणी में पहले तत्व को सम घटना आवृत्ति के साथ वापस करना। समस्या को हल करने का दूसरा तरीका है हैश मैप . का उपयोग करना डेटा संरचना। इसके लिए, हम सरणी को पार करेंगे और एक हैश मैप तैयार करेंगे जो तत्वों को उनकी घटना आवृत्ति के साथ टॉगल के रूप में संग्रहीत करता है यानी सत्य या गलत इस तथ्य के आधार पर कि यह सम है या नहीं। यह जाँच के ऊपरी हिस्से को कम करेगा कि घटना आवृत्ति सही है या गलत क्योंकि टॉगल आवश्यक परिणाम दिखाएगा। मानचित्र के लिए, पहला तत्व जिसका मान सत्य है (घटना की आवृत्ति को भी दर्शाता है) हमारा आवश्यक परिणाम है।
हम सरणी को पार करेंगे और प्रत्येक मान के लिए, सरणी में यानी arr[i] हम मानचित्र में जाँच करेंगे,
यदि यह मानचित्र में मौजूद नहीं है, तो इसे टॉगल मान 'गलत . के साथ मानचित्र में जोड़ें '। यदि यह मानचित्र में मौजूद है, तो इसके अनुरूप वर्तमान मान को टॉगल करें अर्थात यदि यह 'सत्य' है ' इसे 'झूठा' बनाएं ', और अगर यह 'गलत है ' इसे 'सच बनाएं '।
सरणी के पुनरावृति के बाद, मानचित्र को पुनरावृत्त करें और 'सत्य के रूप में टॉगल के संबंधित मान के साथ पहला मान लौटाएं '।
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम
#include <bits/stdc++.h> using namespace std; int findFirstEvenFreqVal(int arr[], int n){ unordered_map<int, bool> freqTogMap; for (int i = 0; i < n; i++){ if (freqTogMap.find(arr[i]) == freqTogMap.end()) freqTogMap.insert(pair <int,bool> (arr[i],false)); else { bool val = freqTogMap.find(arr[i])->second; if (val == true) freqTogMap.find(arr[i])->second = false; else freqTogMap.find(arr[i])->second = true; } } int j = 0; for (j = 0; j < n; j++){ if (freqTogMap.find(arr[j])->second == true) return arr[j];; } return -1; } int main(){ int arr[] = { 2, 4, 6, 8, 1, 6 }; cout<<"The first element of the array which appears even number of times is " <<findFirstEvenFreqVal(arr, 6); return 0; }
आउटपुट
The first element of the array which appears even number of times is 6