इस समस्या में, हमें पूर्णांकों की एक सरणी arr[] और एक रेंज दी गई है। हमारा कार्य जांचना है कि क्या एक उपसरणी पर्वत के रूप में है या नहीं।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट : arr[] = {1, 4, 2, 5, 6, 7, 3, 0}, रेंज = [2, 7] आउटपुट : हाँ व्याख्या −
रेंज की उपसरणी = {2, 5, 6, 7, 3, 0} मान पहले बढ़ते हैं और फिर घटते हैं। समाधान दृष्टिकोण
समस्या का एक सरल समाधान अतिरिक्त सरणियों का उपयोग करना है। हम सरणी के प्रत्येक तत्व के लिए उस अंतिम तत्व का इंडेक्स ढूंढेंगे जो बढ़ रहा है और घटते मानों के लिए भी ऐसा ही करेंगे। फिर दिए गए रेंज में पर्वत की जांच करेंगे।
उदाहरण
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम
#include <iostream> using namespace std; int processArray(int arr[], int N, int left[], int right[]){ left[0] = 0; int increasingValR = 0; for (int i = 1; i < N; i++){ if (arr[i] > arr[i - 1]) increasingValR = i; left[i] = increasingValR; } right[N - 1] = N - 1; int decreasingValL = N - 1; for (int i = N - 2; i >= 0; i--){ if (arr[i] > arr[i + 1]) decreasingValL = i; right[i] = decreasingValL; } } bool isMountainSubArray(int arr[], int left[], int right[], int L, int R){ return (right[L] >= left[R]); } int main(){ int arr[] = {2, 3, 2, 4, 4, 6, 3, 2}; int N = sizeof(arr) / sizeof(int); int left[N], right[N]; processArray(arr, N, left, right); int L = 0; int R = 2; if (isMountainSubArray(arr, left, right, L, R)) cout<<"उपसरणी पर्वत रूप में है"; else cout<<"उपसरणी पर्वत रूप में नहीं है"; return 0; } आउटपुट
उपसरणी पर्वत रूप में है