इस समस्या में, हमें पूर्णांकों की एक सरणी और एक पूर्णांक योग दिया गया है और हमें उन सभी पूर्णांक युग्मों को प्रिंट करना है जिनका योग योग मान के बराबर है।
समस्या को समझने के लिए एक उदाहरण लेते हैं :
इनपुट - सरणी = {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 ]