मान लीजिए हमारे पास पूर्णांकों का एक सेट है। हमें एक संख्या '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#include #include using namespace std; int findElementsInSet(int arr[], int n) { unordered_map > 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 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