मान लीजिए कि हमारे पास पूर्णांकों का एक समूह है। हमें एक संख्या 'd' ढूंढनी है, जहां d =a + b + c, और हमें अधिकतम करना है (a + b + c), सभी a, b, c, और d सेट में मौजूद हैं। सेट में कम से कम एक तत्व और अधिकतम 1000 तत्व होंगे। प्रत्येक तत्व एक परिमित संख्या होगी। यदि समुच्चय {2, 3, 5, 7, 12} है, तो 12 सबसे बड़ा d है। इसे 2 + 3 + 7 द्वारा दर्शाया जा सकता है
इस समस्या को हल करने के लिए हम हैशिंग तकनीक का उपयोग कर सकते हैं। हम (a + b) के सभी युग्मों का योग हैश तालिका में संग्रहीत करेंगे, फिर सभी युग्मों (c, d) के माध्यम से पार करेंगे और खोज (d - c) तालिका में मौजूद है या नहीं। यदि एक मैच मिलता है, तो सुनिश्चित करें कि कोई भी दो तत्व समान नहीं हैं, और एक ही तत्व को दो बार नहीं माना जाता है।
उदाहरण
#include<iostream> #include<unordered_map> #include<climits> using namespace std; int findElementsInSet(int arr[], int n) { unordered_map<int, pair<int, int> > table; for (int i = 0; i < n - 1; i++) for (int j = i + 1; j < n; j++) table[arr[i] + arr[j]] = { i, j }; int d = INT_MIN; for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { int abs_diff = abs(arr[i] - arr[j]); if (table.find(abs_diff) != table.end()) { pair<int, int> p = table[abs_diff]; if (p.first != i && p.first != j && p.second != i && p.second != j) d = max(d, max(arr[i], arr[j])); } } } return d; } int main() { int arr[] = { 2, 3, 5, 7, 12 }; int n = sizeof(arr) / sizeof(arr[0]); int res = findElementsInSet(arr, n); if (res == INT_MIN) cout << "Cannot find the value of d"; else cout << "Max value of d is " << res; }
आउटपुट
Max value of d is 12