इस समस्या में, हमें पूर्णांकों की एक सरणी और एक पूर्णांक योग दिया जाता है और हमें पूर्णांकों के उन सभी युग्मों को प्रिंट करना होता है जिनका योग योग मान के बराबर होता है।
समस्या को समझने के लिए एक उदाहरण लेते हैं:
इनपुट − सरणी ={1, 6, -2, 3} योग =4
आउटपुट - (1, 3) , (6, -2)
यहां, हमें दिए गए योग मान वाले जोड़े चाहिए।
समस्या का एक सरल समाधान उन तत्वों के जोड़े की जाँच करना होगा जो योग उत्पन्न करते हैं। यह ट्रैवर्सिंग एरे द्वारा किया जा सकता है और एरे में वह संख्या ज्ञात करें जो योग मान के बराबर हो।
उदाहरण
यह प्रोग्राम समाधान का वर्णन करेगा -
#include <iostream> using namespace std; int printPairsWithSum(int arr[], int n, int sum){ int count = 0; for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) if (arr[i] + arr[j] == sum) cout<<"[ "<<arr[i]<<", "<<arr[j]<<" ]\n"; } int main(){ int arr[] = {1, 6, -2, 3}; int n = 4; int sum = 4; cout<<"Pairs with Sum "<<sum<<" are :\n"; printPairsWithSum(arr, n, sum); return 0; }
आउटपुट
Pairs with Sum 4 are : [ 1, 3 ] [ 6, -2 ]
यह विधि समझने में आसान है लेकिन काफी कारगर नहीं है। दूसरा तरीका हैशिंग का उपयोग करना होगा।
हम एक हैश तालिका शुरू करेंगे और सरणी को पार करें और उसमें जोड़े खोजें। मैच होने पर, हम ऐरे को प्रिंट करेंगे:
उदाहरण
निम्न प्रोग्राम आपको एल्गोरिथम को बेहतर ढंग से समझने में मदद करेगा -
#include <bits/stdc++.h> using namespace std; void printPairsWithSum(int arr[], int n, int sum){ unordered_map<int, int> pair; for (int i = 0; i < n; i++) { int rem = sum - arr[i]; if (pair.find(rem) != pair.end()) { int count = pair[rem]; for (int j = 0; j < count; j++) cout<<"["<<rem<<", "<<arr[i]<<" ]\n"; } pair[arr[i]]++; } } int main(){ int arr[] = {1, 6, -2, 3}; int n = 4; int sum = 4; cout<<"The pair with sum is \n"; printPairsWithSum(arr, n, sum); return 0; }
आउटपुट
Pairs with Sum 4 are : [ 1, 3 ] [ 6, -2 ]