Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में एक ऐरे में K-diff Pairs


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

  1. एक सरणी में सभी जोड़े (ए, बी) खोजें जैसे कि सी ++ में% बी =के

    मान लीजिए कि हमारे पास एक सरणी ए है, उस सरणी से, हमें सभी जोड़े (ए, बी) प्राप्त करना है जैसे कि ए% बी =के। मान लीजिए कि सरणी A =[2, 3, 4, 5, 7] और k =3 है, तो जोड़े (7, 4), (3, 4), (3, 5), (3, 7) हैं। इसे हल करने के लिए, हम सूची को देखेंगे और जांचेंगे कि दी गई शर्त संतोषजनक है या नहीं। उदाहरण #inc

  1. सी ++ स्ट्रिंग्स की सरणी

    इस खंड में हम देखेंगे कि C++ में स्ट्रिंग्स की एक सरणी को कैसे परिभाषित किया जाए। जैसा कि हम जानते हैं कि सी में कोई तार नहीं था। हमें कैरेक्टर ऐरे का उपयोग करके स्ट्रिंग्स बनाना है। इसलिए स्ट्रिंग्स की कुछ सरणी बनाने के लिए, हमें वर्णों की एक 2-आयामी सरणी बनानी होगी। प्रत्येक पंक्तियाँ उस मैट्रिक्स

  1. सी++ में छँटाई

    इस खंड में हम देखेंगे कि C++ में सॉर्टिंग एल्गोरिथम कैसे किया जाता है। एक क्रमबद्ध सरणी एक सरणी है जिसमें प्रत्येक तत्व को किसी क्रम में क्रमबद्ध किया जाता है जैसे संख्यात्मक, वर्णानुक्रम आदि। संख्यात्मक सरणी को सॉर्ट करने के लिए कई एल्गोरिदम हैं जैसे कि बबलसॉर्ट, इंसर्शन सॉर्ट, सेलेक्शन सॉर्ट, मर्ज