पूर्णांकों का एक एरे दिया गया है, कार्य यह जांचना है कि एरे सॉर्टेड (बढ़ते क्रम में) है और कुछ पोजीशन के बाद रोटेटेड है या नहीं।
उदाहरण के लिए
इनपुट-1:
N = [7, 8, 9, 4, 5, 6]
आउटपुट:
True
व्याख्या: चूंकि दिया गया एरे बढ़ते क्रम में है और तीसरी पोजीशन के बाद एलिमेंट्स रोटेटेड हैं, हम इस मामले में True लौटाएंगे।
इनपुट-2:
N = [1, 5, 7, 6, 2, 3]
आउटपुट:
False
व्याख्या: चूंकि दिया गया एरे न तो बढ़ते क्रम में है और न ही किसी विशिष्ट पोजीशन के साथ रोटेटेड है, आउटपुट False है।
इस समस्या को हल करने का दृष्टिकोण
हमारे पास एलिमेंट्स के साथ एक एरे है जो या तो बढ़ते क्रम में है या अनसॉर्टेड। यदि एरे को सॉर्टेड और रोटेटेड होना है, तो कम से कम एक एलिमेंट ऐसा होगा जैसे कि N[i] > N[i+1]।
इस प्रकार, प्रत्येक N[i] के लिए, हम गिनेंगे कि क्या कोई ऐसा एलिमेंट है जो शर्त को संतुष्ट करता है और तदनुसार True या False लौटाएंगे।
- एरे एलिमेंट का इनपुट लें।
- एक बूलियन फ़ंक्शन checkSortedandRotated(int *arr, int n) एक एरे और उसके आकार को इनपुट के रूप में लेता है और यदि एरे सॉर्टेड और रोटेटेड है तो true लौटाता है अन्यथा false।
- पूरे एरे पर पुनरावृति करें और उन एलिमेंट्स की संख्या गिनें जो (arr[i] > arr[i+1]%n) हैं। यदि गिनती '1' है, तो True लौटाएं, अन्यथा False लौटाएं।
- आउटपुट लौटाएं।
उदाहरण
#include <bits/stdc++.h>
using namespace std;
bool checkSortedandRotated(int * arr, int n) {
int count = 0;
for (int i = 0; i < n; i++) {
if (arr[i] > arr[(i + 1) % n])
count++;
}
return (count <= 1);
}
int main() {
int arr[] = {5,6,7,1,2,3,4};
int n = sizeof(arr) / sizeof(int);
if (checkSortedandRotated(arr, n)) {
cout << "True" << endl;
} else {
cout << "False" << endl;
}
return 0;
}
उपरोक्त कोड चलाने से आउटपुट इस प्रकार उत्पन्न होगा,
आउटपुट
True
चूंकि दिया गया एरे [5, 6, 7, 1, 2, 3, 4] सॉर्टेड है और तीसरी पोजीशन से रोटेटेड है, हमें इस मामले में आउटपुट 'True' मिलता है।