मान लीजिए कि हमारे पास एक सरणी और एक पूर्णांक k है, हमें सरणी में अद्वितीय k-diff जोड़े की संख्या ज्ञात करनी है। यहाँ k-diff युग्म (i, j) जैसा है, जहाँ i और j दोनों ऐरे में मौजूद हैं और उनका निरपेक्ष अंतर k है।
इसलिए, यदि इनपुट [3,1,4,1,5], k =2 जैसा है, तो आउटपुट 2 होगा, क्योंकि सरणी-जैसे (1,3) और ( 3,5)।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
देखे और हो चुके मानचित्रों को परिभाषित करें
-
एक सेट को परिभाषित करें
-
अगर के <0, तो -
-
वापसी 0
-
-
इनिशियलाइज़ i :=0 के लिए, जब i <अंकों का आकार, अपडेट करें (i से 1 बढ़ाएँ), करें -
-
(देखी गई [संख्या [i]] 1 से बढ़ाएँ)
-
nums[i] s में डालें
-
-
उत्तर:=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