मान लीजिए कि हमारे पास पसंदीदा कंपनियों नामक एक सरणी है जहां पसंदीदा कंपनियां [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] है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
फ़ंक्शन को परिभाषित करें ठीक है (), यह एक सरणी लेगा a, एक सरणी b,
-
सीएनटी:=0, मैं:=0, जे:=0
-
सही लौटें जब cnt <का आकार
-
मुख्य विधि से निम्न कार्य करें -
-
एक सेट को परिभाषित करें
-
n :=f का आकार
-
इनिशियलाइज़ i:=0 के लिए, जब i
-
सरणी को क्रमबद्ध करें f[i]
-
-
इनिशियलाइज़ i:=0 के लिए, जब i
-
सी:=सच
-
इनिशियलाइज़ j :=0 के लिए, जब j
-
यदि i, j के समान है, तो -
-
निम्नलिखित भाग पर ध्यान न दें, अगले पुनरावृत्ति पर जाएं
-
-
सी:=सी और ठीक (एफ [i], एफ [जे])
-
-
अगर c गैर-शून्य है, तो -
-
मुझे s में डालें
-
-
-
s के तत्वों को एक सरणी के रूप में लौटाएं
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#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, ]