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

वे लोग जिनकी पसंदीदा कंपनियों की सूची C++ में किसी अन्य सूची का उपसमुच्चय नहीं है

मान लीजिए कि हमारे पास पसंदीदा कंपनियों नामक एक सरणी है जहां पसंदीदा कंपनियां [i] ith व्यक्ति की पसंदीदा कंपनियों की सूची है। हमें उन लोगों के सूचकांकों को खोजना होगा जिनकी पसंदीदा कंपनियों की सूची पसंदीदा कंपनियों की किसी अन्य सूची का सबसेट नहीं है।

इसलिए, यदि इनपुट पसंदीदाकंपनियों की तरह है =[["TCS", "google", "facebook"], ["google", "microsoft"], ["google", "facebook"], ["google"], ["अमेज़ॅन"]], तो आउटपुट [0,1,4] होगा, ऐसा इसलिए है क्योंकि इंडेक्स =2 वाले व्यक्ति के पास ["google", "facebook"] है जो पसंदीदा कंपनियों का सबसेट है [0] =[" TCS", "google", "facebook"] इंडेक्स 0 वाले व्यक्ति के अनुरूप है।

अब इंडेक्स =3 वाले व्यक्ति के पास ["google"] है जो कि पसंदीदाकंपनियों का एक सबसेट है[0]=["TCS", "google", "facebook"] और पसंदीदाकंपनियां[1]=["google", "microsoft"] . पसंदीदा कंपनियों की अन्य सूचियां किसी अन्य सूची का उपसमुच्चय नहीं हैं, इसलिए, उत्तर [0,1,4] है।

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

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   bool ok(vector<string>& a, vector<string>& b){
      int cnt = 0;
      int i = 0;
      int j = 0;
      while (i < a.size() && j < b.size()) {
         if (a[i] == b[j]) {
            i++;
            j++;
            cnt++;
         }
         else if (a[i] < b[j]) {
            i++;
         }
         else {
            j++;
         }
      }
      return cnt < a.size();
   }
   vector<int> peopleIndexes(vector<vector<string> >& f){
      set<int> s;
      int n = f.size();
      for (int i = 0; i < n; i++) {
         sort(f[i].begin(), f[i].end());
      }  
      for (int i = 0; i < n; i++) {
         bool c = true;
         for (int j = 0; j < n; j++) {
            if (i == j)
               continue;
            c &= ok(f[i], f[j]);
         }
         if (c)
            s.insert(i);
      }
      return vector<int>(s.begin(), s.end());
   }
};
main(){
   Solution ob;
   vector<vector<string>> v = {{"TCS","google","facebook"},{"google","microsoft"},{"google","facebo
ok"},{"google"},{"amazon"}};
print_vector(ob.peopleIndexes(v));
}

इनपुट

{{"TCS","google","facebook"},{"google","microsoft"},{"google","facebook"},{"google"},{"amazon"}}

आउटपुट

[0, 1, 4, ]

  1. जांचें कि वर्णों की दोहरी लिंक की गई सूची पैलिंड्रोम है या नहीं C++

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

  1. जांचें कि एक सर्कल दूसरे सर्कल के अंदर है या नहीं C++

    मान लीजिए कि हमारे पास दो सर्कल हैं (केंद्र बिंदु और त्रिज्या मान), हमें जांचना है कि एक सर्कल दूसरे सर्कल के अंदर फिट है या नहीं। तीन संभावित कारण हैं। छोटा वृत्त एक दूसरे को छुए बिना, पूरी तरह से बड़े के अंदर होता है। इस मामले में, केंद्रों और छोटी त्रिज्या के बीच की दूरी का योग एक बड़े त्रिज्य

  1. सी ++ में स्ट्रैंड सॉर्ट करें

    इस खंड में हम देखेंगे कि हम सी ++ के मानक पुस्तकालय का उपयोग करके कुछ सरणी या लिंक्ड सूची को कैसे सॉर्ट कर सकते हैं। सी ++ में कई अलग-अलग पुस्तकालय हैं जिनका उपयोग विभिन्न उद्देश्यों के लिए किया जा सकता है। छँटाई उनमें से एक है। C++ फ़ंक्शन std::list::sort() सूची के तत्वों को आरोही क्रम में क्रमबद्