हमें किसी भी आकार का एक सरणी दिया गया है और कार्य है उस सरणी में उपसरणी ढूंढना जहां आसन्न तत्वों के बीच का अंतर 0 या 1 हो।
उदाहरण
इनपुट: int arr[] = { 2, 1, 5, 6, 3, 4, 7, 6 }
आउटपुट: आसन्न तत्वों के बीच अंतर 0 या 1 होने पर अधिकतम लंबाई की उपसरणी: 2
व्याख्या: अंतर 0 या 1 वाले आसन्न तत्व {2, 1}, {5, 6}, {3, 4} और {7, 6} हैं। इसलिए उपसरणी की अधिकतम लंबाई 2 है।
इनपुट: int arr[] = { 2, 1, 7, 6, 5 }
आउटपुट: आसन्न तत्वों के बीच अंतर 0 या 1 होने पर अधिकतम लंबाई की उपसरणी: 3
व्याख्या: अंतर 0 या 1 वाले आसन्न तत्व {2, 1} और {7, 6, 5} हैं। इसलिए उपसरणी की अधिकतम लंबाई 3 है।
प्रयुक्त दृष्टिकोण
- पूर्णांक प्रकार की एक सरणी इनपुट करें जिसमें धनात्मक और ऋणात्मक दोनों तत्व हो सकते हैं।
- सरणी का आकार गणना करें और सरणी व आकार को आगे की कार्यक्षमता के लिए फ़ंक्शन में पास करें।
- एक अस्थायी चर i लें और इसे 0 पर सेट करें और maximum चर को 0 पर सेट करें।
- i से सरणी के आकार तक while लूप शुरू करें।
- लूप के अंदर, j को i पर सेट करें।
- एक और लूप शुरू करें जो आसन्न तत्वों के साथ उपसरणी की गणना करेगा कि अंतर 0 है या नहीं।
- लूप के अंदर, i का मान बढ़ाएं।
- temp को i-j+1 पर सेट करें।
- जांचें कि क्या maximum, temp से कम है तो maximum को temp पर सेट करें।
- जांचें कि क्या j, i के बराबर है तो i का मान बढ़ाएं।
- maximum लौटाएं।
- परिणाम प्रिंट करें।
उदाहरण कोड
#include<bits/stdc++.h> using namespace std; // आसन्न तत्वों के बीच 0 या 1 अंतर वाली अधिकतम लंबाई की उपसरणी की गणना करने का फ़ंक्शन int maximum_diff(int arr[], int size){ int i = 0; int maximum = 0; while (i < size){ int j = i; while (i+1 < size && (abs(arr[i] - arr[i + 1]) == 1 || abs(arr[i] - arr[i + 1]) == 0)){ i++; } int temp = i - j + 1; if (maximum < temp){ maximum = temp; } if(j == i){ i++; } } return maximum; } int main(){ int arr[] = { 2, 1, 5, 6, 3, 4, 7, 6}; int size = sizeof(arr) / sizeof(arr[0]); cout<<"आसन्न तत्वों के बीच अंतर 0 या 1 होने पर अधिकतम लंबाई की उपसरणी: "<< maximum_diff(arr, size); } आउटपुट
आसन्न तत्वों के बीच अंतर 0 या 1 होने पर अधिकतम लंबाई की उपसरणी: 2