इस समस्या में, हमें n पूर्णांक मानों की एक सरणी aar[] दी गई है जो क्रमबद्ध नहीं हैं और एक पूर्णांक वैल है। हमारा काम है बिना क्रमबद्ध सरणी में किसी तत्व की शुरुआत और समाप्ति अनुक्रमणिका ढूंढना ।
सरणी में तत्व की घटना के लिए, हम वापस आ जाएंगे,
"सूचकांक प्रारंभ करना और अनुक्रमणिका समाप्त करना" यदि यह सरणी में दो या अधिक बार पाया जाता है।
"एकल अनुक्रमणिका " अगर यह एक बार सरणी में पाया जाता है।
"तत्व मौजूद नहीं है" अगर यह सरणी में मौजूद नहीं है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
उदाहरण 1
Input : arr[] = {2, 1, 5, 4, 6, 2, 3}, val = 2 Output : starting index = 0, ending index = 5
स्पष्टीकरण
तत्व 2 की दो घटनाएँ हैं,
सूचकांक पर पहला =0,
सूचकांक में दूसरा =5
उदाहरण 2
Input : arr[] = {2, 1, 5, 4, 6, 2, 3}, val = 5 Output : Present only once at index 2
स्पष्टीकरण
इंडेक्स =2 पर, तत्व 5 की केवल एक घटना होती है,
उदाहरण 3
Input : arr[] = {2, 1, 5, 4, 6, 2, 3}, val = 7 Output : Not present in the array!
समाधान दृष्टिकोण
समस्या का एक सरल समाधान सरणी को पार करना है।
हम सरणी को पार करेंगे और दो इंडेक्स मान रखेंगे, पहला और आखिरी। पहली अनुक्रमणिका प्रारंभ से सरणी को पार करेगी और अंतिम अनुक्रमणिका अंत से सरणी को पार करेगी। और फिर लूप को तब समाप्त करें जब पहली और आखिरी अनुक्रमणिका में तत्व का मान समान हो जाए।
एल्गोरिदम
-
चरण 1 - सरणी के माध्यम से लूप करें
-
चरण 1.1 - शुरुआत से ट्रैवर्सिंग के लिए पहली इंडेक्स और अंत से ट्रैवर्सिंग के लिए आखिरी इंडेक्स का प्रयोग करें।
-
चरण 1.2 - यदि किसी सूचकांक का मान वैल के बराबर है। अनुक्रमणिका मान में वृद्धि न करें।
-
चरण 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