दिए गए सॉर्टेड पूर्णांकों की सरणी में, कार्य प्रत्येक सरणी तत्व के वर्ग को प्रिंट करना और सरणी को सॉर्टेड क्रम में प्रिंट करना है। उदाहरण के लिए,
इनपुट-1 -
arr[] = {-3, -1, 0, 1, 4, 6};
आउटपुट -
{0, 1, 1, 9, 16, 36}
व्याख्या - दी गई सरणी [-3, -1, 0, 1, 4, 6] के प्रत्येक तत्व का वर्ग [0, 1, 1, 9, 16, 36] है।
इनपुट-2 -
arr[] = {0, 1, 2, 8, 9}
आउटपुट -
{0, 1, 4, 64, 81}
व्याख्या - दी गई सरणी [0, 1, 2, 8, 9] के प्रत्येक तत्व का वर्ग [0, 1, 4, 64, 81] है।
इस प्रॉब्लम को हल करने का दृष्टिकोण
इस विशेष प्रॉब्लम को हल करने के लिए, हम टू-पॉइंटर दृष्टिकोण का उपयोग कर सकते हैं। टू-पॉइंटर में हम दो पॉइंटर्स लेफ्ट और राइट का उपयोग करते हैं। लेफ्ट पॉइंटर सरणी के पहले तत्व से इनिशियलाइज़ होता है और राइट पॉइंटर सरणी के अंतिम तत्व की ओर इशारा करता है।
सरणी के तत्वों पर पुनरावृति करते समय हम मान का वर्ग ज्ञात करेंगे और जांचेंगे कि राइट पूर्णांक का वर्ग लेफ्ट पूर्णांक से अधिक है या कम।
बढ़ते क्रम में पूर्णांकों की एक सरणी का इनपुट लें।
एक पूर्णांक फंक्शन squareAndSort(int *arr, int n) पूर्णांकों की एक सरणी को इनपुट के रूप में लेता है और सरणी के प्रत्येक तत्व का वर्ग सॉर्टेड तरीके से लौटाता है।
दो पॉइंटर्स लेफ्ट और राइट को सरणी के लेफ्ट तत्व और राइटमोस्ट तत्व के साथ इनिशियलाइज़ करें।
तत्व का वर्ग प्रिंट करें और इसकी तुलना राइट तत्व के वर्ग से करें।
लेफ्ट और राइट पॉइंटर्स को तदनुसार बढ़ाएं और घटाएं।
उदाहरण
#include <bits/stdc++.h>
using namespace std;
vector<int> squareAndSort(vector<int>& arr) {
int left = 0;
int right = arr.size() - 1;
vector<int> vec;
while (left <= right) {
while (left <= right) {
int v1 = arr[left] * arr[left];
int v2 = arr[right] * arr[right];
if (v1 <= v2) {
vec.push_back(v2);
right--;
} else {
vec.push_back(v1);
left++;
}
}
reverse(vec.begin(), vec.end());
}
return vec;
}
int main() {
vector<int> arr = {-3, -1, 0, 1, 4, 6};
vector<int> ans = squareAndSort(arr);
for (auto x : ans) {
cout << x << " ";
}
return 0;
}
आउटपुट
उपरोक्त कोड चलाने पर निम्न आउटपुट उत्पन्न होगा,
0 1 1 9 16 36
सरणी के प्रत्येक तत्व का वर्ग है, 9, 1, 0, 1, 16, 36। इन तत्वों को सॉर्ट करने के बाद, आउटपुट 0 1 1 9 16 36 होगा।