क्रमबद्ध पूर्णांकों के दिए गए सरणी में, कार्य प्रत्येक सरणी तत्व के वर्गों को प्रिंट करना और क्रमबद्ध क्रम में सरणी को प्रिंट करना है। उदाहरण के लिए,
इनपुट-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 ] है।
इस समस्या को हल करने का तरीका
इस विशेष समस्या को हल करने के लिए, हम टू-पॉइंटर दृष्टिकोण का उपयोग कर सकते हैं। टू-पॉइंटर में हम बाएँ और दाएँ दो पॉइंटर्स का उपयोग करते हैं। सरणी के पहले तत्व के साथ आरंभ किया गया बायां सूचक और दायां सूचक सरणी के अंतिम तत्व की ओर इशारा करता है।
सरणी के तत्वों पर पुनरावृति करते हुए हम मान का वर्ग पाएंगे और जांचेंगे कि दाएं पूर्णांक का वर्ग बाएं पूर्णांक से बड़ा है या कम।
-
बढ़ते क्रम में पूर्णांकों की एक सरणी इनपुट करें।
-
एक पूर्णांक फ़ंक्शन वर्गAndSort(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 होगा।