इस समस्या में, हमें संख्याओं की एक क्रमबद्ध सरणी दी जाती है और हमें अंकगणितीय प्रगति के रूप में त्रिगुणों को खोजने की आवश्यकता होती है।
एक अंकगणितीय प्रगति संख्याओं की एक श्रृंखला है जिसमें क्रमागत पदों के बीच का अंतर समान होता है।
आइए समस्या को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं -
Input : array = {2 , 5 , 7, 8 , 9 , 10} Output : 2 5 8 5 7 9 7 8 9 8 9 10
इस समस्या को हल करने के लिए, एक साधारण समाधान तीन लूप चलाना और सभी ट्रिपल की जांच करना होगा यदि वे एपी में हैं। लेकिन इस पद्धति में क्रम की समय जटिलता है n 3 ।
एक बेहतर समाधान हैशिंग का उपयोग कर रहा है। इस पद्धति में, हम सरणी के दूसरे तत्व से शुरू करेंगे और प्रत्येक तत्व को AP के मध्य तत्व के रूप में मानेंगे और जांचेंगे कि यह AP बनाता है या नहीं।
उदाहरण
#include <iostream> using namespace std; void TripletsAP(int arr[], int n){ for (int i = 1; i < n - 1; i++){ for (int j = i - 1, k = i + 1; j >= 0 && k < n;){ if (arr[j] + arr[k] == 2 * arr[i]){ cout<<arr[j]<<"\t"<<arr[i]<<"\t"<< arr[k] << endl; k++; j--; } else if (arr[j] + arr[k] < 2 * arr[i]) k++; else j--; } } } int main(){ int arr[] = {2 , 5 , 7, 8 , 9 , 10}; int n = sizeof(arr) / sizeof(arr[0]); cout<<"The triplets that are in AP are : \n"; TripletsAP(arr, n); return 0; }
आउटपुट
AP में मौजूद त्रिक हैं -
2 5 8 5 7 9 7 8 9 8 9 10