কম্পিউটার টিউটোরিয়াল

C++-এ দেয়া সম বিশিষ্ট পেয়ার গণনা: টু-পয়েন্টার/হ্যাশ ম্যাপ

একটি পূর্ণসংখ্যা অ্যারে এবং একটি টার্গেট সম দেওয়া আছে। যেসব যোড়ার যোগফল টার্গেট সমের সমান, তাদের সংখ্যা গণনা করুন।

উদাহরণ

অ্যারে: [2, 8, 1, 5, 11], Sum = 10

যোড়া: (2,8) → আউটপুট: 1 (নোট: উদাহরণে ভুলে 13 লেখা আছে)

পদ্ধতিগুলো

১. ব্রুট ফোর্স O(n²)


for (i=0 to n-1)
  for (j=i+1 to n-1)
    if (arr[i]+arr[j]==sum) count++;

২. হ্যাশ ম্যাপ O(n)


unordered_map freq;
for (x : arr) {
    count += freq[sum - x];
    freq[x]++;
}

৩. সর্ট + টু পয়েন্টার O(n log n)


sort(arr);
int i=0, j=n-1;
while (i

C++ বাস্তবায়ন (হ্যাশ ম্যাপ)


#include 
using namespace std;

int Pair_Sum(int arr[], int size, int sum) {
    unordered_map freq;
    int count = 0;
    for (int i = 0; i < size; i++) {
        count += freq[sum - arr[i]];
        freq[arr[i]]++;
    }
    return count;
}

int main() {
    int arr[] = {2, 6, 1, 7, 9, 8};
    int sum = 9;
    int size = sizeof(arr)/sizeof(arr[0]);
    cout << "Pairs with sum " << sum << ": " << Pair_Sum(arr, size, sum);
    return 0;
}

দ্রষ্টব্য

হ্যাশ ম্যাপ পদ্ধতিতে ডুপ্লিকেট হ্যান্ডলিং স্বয়ংক্রিয়। টু-পয়েন্টার পদ্ধতিতে ডুপ্লিকেট হ্যান্ডলিং আলাদা করতে হয়।

  1. C++-এ পার্থক্য K হয় এমন আলাদা জোড়া গণনা (Count Distinct Pairs with Difference K)

  2. C++-এ দেওয়া যোগফলের সাথে সর্বোচ্চ আকারের সাবসেট

  3. নির্দিষ্ট যোগফল দিয়ে সব ট্রিপলেট প্রিন্ট করা C++-তে

  4. নির্দিষ্ট যোগফল দিয়ে সব পেয়ার প্রিন্ট করা C++-তে