এই সমস্যায়, ইন্টিজারগুলোর একটি অ্যারে এবং একটি ইন্টিজার যোগফল দেওয়া থাকে এবং আমাদের সেই ইন্টিজার পেয়ারগুলো প্রিন্ট করতে হবে যাদের যোগফল দেওয়া যোগফল ভ্যালুর সমান।
উদাহরণ দিয়ে বুঝি:
ইনপুট: array = {1, 6, -2, 3} sum = 4
আউটপুট: (1, 3), (6, -2)
এখানে, আমাদের দেওয়া যোগফল ভ্যালু দিয়ে পেয়ার খুঁজে বের করতে হবে।
এই সমস্যাটির একটি সহজ সমাধান হবে যোগফল তৈরি করা এলিমেন্ট পেয়ার চেক করা। এটি অ্যারে ট্রাভার্স করে এবং অ্যারেতে সেই নম্বর খুঁজে বের করে যা যোগফল ভ্যালু দিয়ে যোগফল করে।
C++ উদাহরণ
#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 ]