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

C++ में सेट मिसमैच (Set Mismatch)


मान लीजिए एक सेट S है जिसमें मूल रूप से 1 से n तक की संख्याएं हैं। लेकिन दुर्भाग्य से, किसी त्रुटि के कारण, सेट में एक संख्या दूसरी संख्या की नकल हो गई, जिसके परिणामस्वरूप एक संख्या की पुनरावृत्ति और दूसरी संख्या की हानि हुई।

अब यदि हमारे पास एक सरणी है जिसे nums कहा जाता है जो इस त्रुटि के बाद सेट की डेटा स्थिति को दर्शाती है। हमारा कार्य उस संख्या को ढूंढना है जो दो बार होती है और फिर उस संख्या को ढूंढना है जो गायब है। परिणाम को एक सरणी के रूप में वापस करें।

इसलिए, यदि इनपुट [1,2,3,4,4,6] जैसा है, तो आउटपुट [4,5] होगा।

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

  • आकार 2 की एक सरणी v परिभाषित करें
  • s1 := A के सभी संख्याओं का योग
  • n := A का आकार
  • exp_sum := (n * (n + 1)) / 2
  • i := 0 से n-1 तक लूप चलाएं:
    • यदि A[|A[i]| - 1] > 0, तो:
      • A[|A[i]| - 1] = -A[|A[i]| - 1]
    • अन्यथा:
      • v[0] := |A[i]|
      • लूप से बाहर निकलें
  • v[1] := v[0] - (s1 - exp_sum)
  • v वापस करें

उदाहरण

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:

#include <bits/stdc++.h> 
using namespace std; 
void print_vector(vector<auto> v){ 
    cout << "["; 
    for(int i = 0; i<v.size(); i++){ 
        cout << v[i] << ", "; 
    } 
    cout << "]"<<endl; 
} 
class Solution { 
public: 
    vector<int> findErrorNums(vector<int>& A) { 
        vector<int> v(2); 
        long long int s1 = accumulate(A.begin(), A.end(), 0); 
        int n = A.size(); 
        long long int exp_sum = (n * (n + 1)) / 2; 
        for (int i = 0; i < n; i++) { 
            if (A[abs(A[i]) - 1] > 0) { 
                A[abs(A[i]) - 1] = -A[abs(A[i]) - 1]; 
            } 
            else { 
                v[0] = abs(A[i]); 
                break; 
            } 
        } 
        v[1] = v[0] - (s1 - exp_sum); 
        return v; 
    } 
}; 
int main(){ 
    Solution ob; 
    vector<int> v = {1,2,3,4,4,6}; 
    print_vector(ob.findErrorNums(v)); 
}

इनपुट

{1,2,3,4,4,6}

आउटपुट

[4, 5, ]
  1. - C++ STL में set lower_bound() फ़ंक्शन

    C++ STL में Set lower_bound() फ़ंक्शन कंटेनर में उस एलिमेंट की ओर इंगित करने वाले इटरेटर को लौटाता है जो पैरामीटर में पास किए गए k के बराबर है। यदि k सेट कंटेनर में मौजूद नहीं है, तो फ़ंक्शन k से तुरंत अगले एलिमेंट की ओर इंगित करने वाले इटरेटर को लौटाता है जो k से थोड़ा बड़ा है। एल्गोरिथम Begin &nb

  1. - C++ STL में Set find() फ़ंक्शन

    C++ STL में Set find() फ़ंक्शन सेट कंटेनर में खोजे गए एलिमेंट के लिए एक इटरेटर लौटाता है। यदि एलिमेंट नहीं मिलता है तो इटरेटर सेट में अंतिम एलिमेंट के ठीक बाद की स्थिति की ओर इंगित करता है। एल्गोरिथम Begin    Define function printS() to print elements of set container.    initia

  1. C++ STL में Set_Union का कार्यान्वयन C++ STL में Set_Union का कार्यान्वयन

    दो सेट का यूनियन उन तत्वों द्वारा बनाया जाता है जो या तो एक सेट में मौजूद होते हैं, या दोनों में। दूसरे सेट के वे तत्व जिनका पहला सेट में समान तत्व होता है, परिणाम सेट में कॉपी नहीं किए जाते। सामान्य सेट ऑपरेशन हैं: Set Union Set Intersection Symmetric Set Difference या Exclusive-OR Set Difference