मान लीजिए कि हमारे पास एक सरणी और एक पूर्णांक 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