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

C++ में सरणी में K-डिफ जोड़े


समस्या विवरण

मान लीजिए हमारे पास एक सरणी और एक पूर्णांक k है, हमें सरणी में अद्वितीय k-डिफ जोड़े की संख्या ज्ञात करनी है। यहां k-डिफ जोड़ा (i, j) जैसा होता है, जहां i और j दोनों सरणी में मौजूद हैं और उनका निरपेक्ष अंतर k है।

उदाहरण

यदि इनपुट है: [3,1,4,1,5], k = 2, तो आउटपुट होगा 2, क्योंकि सरणी में दो 2-डिफ जोड़े हैं: (1,3) और (3,5)।

हल करने का दृष्टिकोण

इस समस्या को हल करने के लिए निम्नलिखित चरणों का पालन करें:

  • seen और done नामक मैप परिभाषित करें
  • एक सेट s परिभाषित करें
  • यदि k < 0, तो 0 लौटाएं
  • i := 0 से आरंभ करें, जब i < nums का आकार, i को 1 से बढ़ाते हुए:
    • seen[nums[i]] को 1 से बढ़ाएं
    • nums[i] को s में डालें
  • ans := 0
  • s में प्रत्येक तत्व it के लिए:
    • यदि k, 0 के बराबर है:
      • यदि seen[it] > 1, तो ans को 1 से बढ़ाएं
    • अन्यथा:
      • done[it] को 1 से बढ़ाएं
      • यदि (it + k) seen में है लेकिन done में नहीं, तो ans को 1 से बढ़ाएं
      • यदि (it - k) seen में है लेकिन done में नहीं, तो ans को 1 से बढ़ाएं
  • 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
  1. - C++ में सरणी में उन सभी जोड़े (a, b) को खोजें जैसे कि a % b = k

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

  1. - C++ में स्ट्रिंग्स की सरणी

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

  1. - C++ में सॉर्टिंग

    इस सेक्शन में हम देखेंगे कि C++ में सॉर्टिंग एल्गोरिदम कैसे निष्पादित करें। एक सॉर्टेड ऐरे एक ऐरे है जिसमें प्रत्येक एलिमेंट किसी क्रम में सॉर्टेड होते हैं जैसे न्यूमेरिकल, अल्फाबेटिकल आदि। एक न्यूमेरिकल ऐरे को सॉर्ट करने के लिए कई एल्गोरिदम हैं जैसे बबल सॉर्ट, इन्सर्शन सॉर्ट, सिलेक्शन सॉर्ट, मर्ज स