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

C++-এ K-ডিফ পেয়ারস ইন অ্যারে (K-diff Pairs in an Array)


একটি অ্যারে এবং পূর্ণসংখ্যা k দেওয়া আছে। অ্যারেতে কতগুলো ইউনিক k-ডিফ পেয়ার আছে তা বের করতে হবে। k-ডিফ পেয়ার মানে (i, j) যেখানে i এবং j উভয়ই অ্যারেতে আছে এবং |i - j| = k।

উদাহরণ: ইনপুট [3,1,4,1,5], k = 2 হলে আউটপুট ২। পেয়ারগুলো: (1,3) এবং (3,5)।

সমাধানের ধাপসমূহ

  • দুটি ম্যাপ seen এবং done, এবং একটি সেট s সংজ্ঞায়িত করুন।
  • যদি k < 0 হয়, 0 রিটার্ন করুন।
  • অ্যারে nums-এর প্রতিটি উপাদানের জন্য seen[nums[i]]++ এবং s.insert(nums[i]) করুন।
  • ans := 0।
  • সেট s-এর প্রতিটি উপাদান it এর জন্য:
    • যদি k == 0 হয়: seen[it] > 1 হলে ans++।
    • অন্যথায়: done[it]++। যদি (it + k) seen-এ আছে কিন্তু done-এ নাই, ans++। যদি (it - k) seen-এ আছে কিন্তু done-এ নাই, ans++।
  • ans রিটার্ন করুন।

C++ কোড উদাহরণ

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int findPairs(vector<int>& nums, int k) {
        map<int, int> seen, done;
        set<int> s;
        if (k < 0) return 0;
        for (int i = 0; i < nums.size(); i++) {
            seen[nums[i]]++;
            s.insert(nums[i]);
        }
        int ans = 0;
        for (auto it = s.begin(); it != s.end(); it++) {
            if (k == 0) {
                if (seen[*it] > 1) ans++;
            } else {
                done[*it]++;
                if (seen.find(*it + k) != seen.end() && done.find(*it + k) == done.end())
                    ans++;
                if (seen.find(*it - k) != seen.end() && done.find(*it - k) == done.end())
                    ans++;
            }
        }
        return ans;
    }
};

int main() {
    Solution ob;
    vector<int> v = {3,1,4,1,5};
    cout << ob.findPairs(v, 2);
    return 0;
}

ইনপুট

{3,1,4,1,5}, 2

আউটপুট

2
  1. সি++-এ অ্যারে অফ ডাবলড পেয়ারস (Array of Doubled Pairs)

  2. C++ ব্যবহার করে অ্যারেতে a % b = k সেটি করার সব জোড়া (a, b) বের করা

  3. C++-এ স্ট্রিং এর অ্যারে (C++ Array of Strings)

  4. C++-এ সর্টিং (Sorting)