একটি অ্যারে এবং পূর্ণসংখ্যা 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