इस समस्या में, हमें n पूर्णांक मानों की एक सरणी aar[] दी गई है जो सॉर्टेड नहीं है और एक पूर्णांक val। हमारा कार्य अनसॉर्टेड सरणी में किसी तत्व का प्रारंभिक और अंतिम इंडेक्स ढूंढना है।
सरणी में तत्व की घटना के लिए, हम लौटाएंगे,
"प्रारंभिक इंडेक्स और अंतिम इंडेक्स" यदि यह सरणी में दो बार या अधिक पाया जाता है।
"एकल इंडेक्स" यदि यह सरणी में एक बार पाया जाता है।
"तत्व मौजूद नहीं" यदि यह सरणी में मौजूद नहीं है।
उदाहरण से समझते हैं:
उदाहरण 1
इनपुट: arr[] = {2, 1, 5, 4, 6, 2, 3}, val = 2 आउटपुट: प्रारंभिक इंडेक्स = 0, अंतिम इंडेक्स = 5 व्याख्या:
तत्व 2 की दो घटनाएं हैं,
पहली इंडेक्स = 0 पर,
दूसरी इंडेक्स = 5 पर
उदाहरण 2
इनपुट: arr[] = {2, 1, 5, 4, 6, 2, 3}, val = 5 आउटपुट: केवल इंडेक्स 2 पर एक बार मौजूद है व्याख्या:
तत्व 5 की केवल एक घटना है, इंडेक्स = 2 पर,
उदाहरण 3
इनपुट: arr[] = {2, 1, 5, 4, 6, 2, 3}, val = 7 आउटपुट: सरणी में मौजूद नहीं! समाधान दृष्टिकोण
समस्या का एक सरल समाधान सरणी को ट्रैवर्स करना है।
हम सरणी को ट्रैवर्स करेंगे और दो इंडेक्स मान रखेंगे, पहला और अंतिम। पहला इंडेक्स सरणी को शुरुआत से ट्रैवर्स करेगा और अंतिम इंडेक्स सरणी को अंत से ट्रैवर्स करेगा। और फिर लूप को समाप्त कर देंगे जब पहले और अंतिम इंडेक्स पर तत्व का मान समान हो जाए।
एल्गोरिथम
चरण 1 - सरणी के माध्यम से लूप करें
चरण 1.1 - शुरुआत से ट्रैवर्स करने के लिए पहले इंडेक्स और अंत से ट्रैवर्स करने के लिए अंतिम इंडेक्स का उपयोग करें।
चरण 1.2 - यदि किसी इंडेक्स पर मान val के बराबर है। इंडेक्स मान को न बढ़ाएं।
चरण 1.3 - यदि दोनों इंडेक्स पर मान समान हैं तो लौटाएं।
उदाहरण
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम:
#include <iostream> using namespace std; void findStartAndEndIndex(int arr[], int n, int val) { int start = 0; int end = n -1 ; while(1){ if(arr[start] != val) start++; if(arr[end] != val) end--; if(arr[start] == arr[end] && arr[start] == val) break; if(start == end) break; } if (start == end ){ if(arr[start] == val) cout<<"Element is present only once at index : "<<start; else cout<<"Element Not Present in the array"; } else { cout<<"Element present twice at \n"; cout<<"Start index: "<<start<<endl; cout<<"Last index: "<<end; } } int main() { int arr[] = { 2, 1, 5, 4, 6, 2, 9, 0, 2, 3, 5 }; int n = sizeof(arr) / sizeof(arr[0]); int val = 2; findStartAndEndIndex(arr, n, val); return 0; } आउटपुट
Element present twice at Start index: 0 Last index: 8