ধরুন আমাদের একটি অ্যারে এবং একটি পূর্ণসংখ্যা k আছে, আমাদের অ্যারেতে অনন্য কে-ডিফ জোড়ার সংখ্যা খুঁজে বের করতে হবে। এখানে k-diff জোড়া হল (i, j), যেখানে i এবং j উভয়ই অ্যারেতে উপস্থিত এবং তাদের পরম পার্থক্য হল k৷
সুতরাং, যদি ইনপুটটি [3,1,4,1,5], k =2 এর মতো হয়, তাহলে আউটপুট হবে 2, কারণ অ্যারে-এর মতো দুটি 2-ডিফ জোড়া রয়েছে (1,3) এবং ( 3,5)।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
মানচিত্রকে দেখা এবং সম্পন্ন বলে সংজ্ঞায়িত করুন
-
একটি সেট s
সংজ্ঞায়িত করুন -
যদি k <0, তাহলে −
-
রিটার্ন 0
-
-
আরম্ভ করার জন্য i :=0, যখন i <সংখ্যার আকার, আপডেট (i 1 দ্বারা বৃদ্ধি), −
-
(দেখা [সংখ্যা[i]] 1 দ্বারা বৃদ্ধি করুন)
-
s
-এ nums[i] সন্নিবেশ করান
-
-
উত্তর :=0
-
প্রতিটি উপাদানের জন্য এটি s, −
করুন-
যদি k 0 এর সমান হয়, তাহলে −
-
যদি দেখা যায় [এটি]> 1, তাহলে −
-
(উত্তর 1 দ্বারা বৃদ্ধি করুন)
-
-
-
অন্যথায়
-
1 দ্বারা সম্পন্ন [এটি] বৃদ্ধি করুন
-
যদি (it + k) দেখা হয় কিন্তু সম্পন্ন না হয়, তাহলে −
-
(উত্তর 1 দ্বারা বৃদ্ধি করুন)
-
-
যদি (it - k) দেখা যায় কিন্তু সম্পন্ন না হয়, তাহলে −
-
(উত্তর 1 দ্বারা বৃদ্ধি করুন)
-
-
-
-
উত্তর ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#include <bits/stdc++.h&g; 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; } }; main(){ Solution ob; vector<int> v = {3,1,4,1,5}; cout << (ob.findPairs(v, 2)); }
ইনপুট
{3,1,4,1,5}, 2
আউটপুট
2