पूर्णांकों की एक सरणी को देखते हुए, कार्य यह जांचना है कि क्या सरणी को क्रमबद्ध किया गया है (बढ़ते क्रम में) और कुछ संख्या की स्थिति के बाद घुमाया गया है या नहीं।
उदाहरण के लिए
इनपुट-1:
N = [7, 8, 9, 4, 5, 6]
आउटपुट:
True
स्पष्टीकरण: चूंकि दी गई सरणी बढ़ते क्रम में है और तीसरी स्थिति के बाद के तत्वों को घुमाया जाता है, हम इस मामले में सही लौटेंगे।
इनपुट-2:
N = [1, 5, 7, 6, 2, 3]
आउटपुट:
False
स्पष्टीकरण: चूंकि दिया गया सरणी न तो बढ़ते क्रम में है और न ही किसी विशिष्ट स्थिति के साथ घुमाया गया है, आउटपुट गलत है।
इस समस्या को हल करने का तरीका
हमारे पास तत्व के साथ एक सरणी है जो या तो बढ़ते क्रम में है या क्रमबद्ध नहीं है। यदि सरणी को क्रमबद्ध और घुमाया जाना है, तो कम से कम एक तत्व ऐसा होगा कि N[i]> N[i+1]।
इस प्रकार, प्रत्येक एन [i] के लिए, हम गणना करेंगे कि क्या कोई तत्व है जो शर्त को पूरा करता है और तदनुसार सही या गलत लौटाता है।
- सरणी तत्व का इनपुट लें।
- एक बूलियन फ़ंक्शन checkSortedandRotated(int *arr, int n) इनपुट के रूप में एक सरणी और उसका आकार लेता है और यदि सरणी को सॉर्ट किया जाता है और घुमाया जाता है तो सही होता है।
- पूरे सरणी पर पुनरावृति करें और उन तत्वों की संख्या गिनें जो (arr[i]> arr[i+1]%n) हैं। यदि गिनती '1' है, तो सही लौटें, अन्यथा गलत लौटें।
- आउटपुट लौटाएं।
उदाहरण
#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] को तीसरे स्थान से क्रमबद्ध और घुमाया जाता है, इस मामले में हमें आउटपुट 'ट्रू' के रूप में मिलता है।