विवरण
किसी अज्ञात बिंदु पर घुमाए गए अलग-अलग तत्वों की एक क्रमबद्ध सरणी को देखते हुए, कार्य इसमें अधिकतम तत्व ढूंढना है।
उदाहरण
यदि इनपुट सरणी {30, 40, 50, 10, 20} है तो अधिकतम तत्व 50 है।
एल्गोरिदम
- अधिकतम तत्व एकमात्र ऐसा तत्व है जिसका अगला तत्व उससे छोटा है। यदि कोई अगला छोटा तत्व नहीं है, तो कोई रोटेशन नहीं है यानी अंतिम तत्व अधिकतम है
- हम मध्य तत्व के लिए इस स्थिति की जांच मध्य - 1 और मध्य + 1 के तत्वों के साथ तुलना करके करते हैं। यदि अधिकतम तत्व मध्य -1 और मध्य + 1 पर तत्वों के साथ है। यदि अधिकतम तत्व मध्य में नहीं है (न तो मध्य और न ही मध्य और न ही मध्य + 1), तो अधिकतम तत्व बाएँ आधे या दाएँ आधे भाग में होता है -
- यदि मध्य तत्व अंतिम तत्व से बड़ा है, तो अधिकतम तत्व बाएं आधे हिस्से में है
- अन्यथा अधिकतम तत्व दाहिने आधे हिस्से में है
उदाहरण
#include <bits/stdc++.h>
using namespace std;
int getMaxinSortedAndRorated(int *arr, int lont high) {
if (high < low) {
return arr[0];
}
if (high == low) {
return arr[high];
}
int mid = low + (high - low) / 2;
if (mid < high && arr[mid + 1] < arr[) {
return arr[mid];
}
if (mid > low && arr[mid] < arr[mid - {
return arr[mid - 1];
}
if (arr[low] > arr[mid]) {
return getMaxinSortedAndRoratrr, low, mid - 1);
} else {
return getMaxinSortedAndRoratrr, mid + 1, high);
}
}
int main() {
int arr[] = {30, 40, 50, 10, 20};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Maximum element = " << getMaortedAndRorated(arr, 0, n - 1) << endl;
return 0;
} आउटपुट
जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है -
Maximum element = 5