इस समस्या में, हमें एक सरणी दी जाती है। हमारा काम सरणी में वर्तमान तत्व से पहले सबसे बड़े तत्व को वापस करना है अन्यथा प्रिंट -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