इस समस्या में, हमें एक ऐरे दिया गया है। हमारा कार्य ऐरे में वर्तमान एलिमेंट से पहले आने वाले सबसे बड़े एलिमेंट को लौटाना है अन्यथा -1 प्रिंट करना है।
समस्या को समझने के लिए एक उदाहरण लेते हैं
Input: {6, 2, 7, 1, 5, 3} Output: -1, 6, -1, 7, 7, 7इस समस्या को हल करने के लिए, एक आसान और स्पष्ट समाधान नेस्टेड लूप्स का उपयोग करना होगा जो ऐरे के पूर्ववर्ती भाग में बड़े एलिमेंट की जांच करेंगे।
हमारे समाधान के कार्यान्वयन को दिखाने वाला प्रोग्राम
उदाहरण
#include <iostream> using namespace std; void preceddingGreatestElement(int arr[], int n){ cout << "-1\t"; int i, j; for (i = 1; i < n; i++) { for (j = i-1; j >= 0; j--) { if (arr[i]<arr[j]) { cout<<arr[j]<< "\t"; break; } } if (j == -1) cout << "-1\t"; } } int main() { int arr[] = { 6, 2, 7, 1, 12, 5 }; int n = sizeof(arr) / sizeof(arr[0]); preceddingGreatestElement(arr, n); return 0; }आउटपुट
-1 6 -1 7 -1 12
हमारी समस्या को हल करने का एक अधिक प्रभावी समाधान स्टैक डेटा संरचना का उपयोग करना है। और स्टैक के टॉप पर पूर्ववर्ती बड़ी संख्या को बनाए रखना।
इस समाधान के कार्यान्वयन को दिखाने वाला प्रोग्राम
उदाहरण
#include <bits/stdc++.h> using namespace std; void preceddingGreatestElement(int arr[], int n) { stack<int> elements; elements.push(arr[0]); cout << "-1\t"; for (int i = 1; i < n; i++) { while (elements.empty() == false && elements.top() < arr[i]) elements.pop(); if(elements.empty()) cout<<"-1\t"; else cout<<elements.top()<<"\t"; elements.push(arr[i]); } } int main() { int arr[] = { 6, 2, 7, 1, 12, 5 }; int n = sizeof(arr) / sizeof(arr[0]); preceddingGreatestElement(arr, n); return 0; }आउटपुट
-1 6 -1 7 -1 12