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