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

सी ++ में बेमेल सेट करें


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

अब अगर हमारे पास अंक नामक एक सरणी है जो त्रुटि के बाद इस सेट की डेटा स्थिति का प्रतिनिधित्व कर रही है। हमारा काम दो बार आने वाली संख्या का पता लगाना है और फिर छूटी हुई संख्या का पता लगाना है। परिणामों को एक सरणी के रूप में लौटाएं।

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

होगा

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • आकार 2 की एक सरणी v परिभाषित करें

  • s1 :=A की सभी संख्याओं का योग

  • n :=A का आकार

  • exp_sum :=(n * (n + 1))

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • अगर ए[|ए[i]| - 1]> 0, फिर -

      • ए[|ए[i]| - 1] =-ए[|ए[i]| - 1]

    • अन्यथा

      • v[0] :=|ए[i]|

      • लूप से बाहर आएं

  • v[1] :=v[0] - (s1 - exp_sum)

  • वापसी वी

उदाहरण

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

#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;
   }
};
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 में लोअर_बाउंड () फ़ंक्शन सेट करें, कंटेनर में तत्व की ओर इशारा करते हुए एक इटरेटर देता है जो कि पैरामीटर में पारित k के बराबर है। यदि k सेट कंटेनर में मौजूद नहीं है, तो फ़ंक्शन तत्काल अगले तत्व की ओर इशारा करते हुए एक पुनरावर्तक देता है जो कि k से थोड़ा बड़ा है। एल्गोरिदम Begin    

  1. सी ++ एसटीएल में ढूंढें () फ़ंक्शन सेट करें

    C++ STL में सेट ढूंढें () फ़ंक्शन सेट कंटेनर में खोजे गए तत्व के लिए एक पुनरावर्तक देता है। इटरेटर सेट में अंतिम तत्व के ठीक बाद की स्थिति को इंगित करता है, यदि तत्व नहीं मिला है। एल्गोरिदम Begin    Define function printS() to print elements of set container.    initialize an emp

  1. STL में Set_Union को लागू करने के लिए C++ प्रोग्राम

    दो समुच्चयों का मिलन उन तत्वों द्वारा निर्मित होता है जो किसी एक समुच्चय में या दोनों में मौजूद होते हैं। दूसरे सेट के तत्व जिनमें पहले सेट में समान तत्व होते हैं, उन्हें परिणामी सेट में कॉपी नहीं किया जाता है। सामान्य सेट ऑपरेशन हैं - संघ सेट करें चौराहे सेट करें सममित सेट अंतर या अनन्य-या अंतर य