ধরুন আমাদের প্রিয় কোম্পানি নামক একটি অ্যারে আছে যেখানে favoriteCompanies[i] হল ith ব্যক্তির পছন্দের কোম্পানির তালিকা। আমাদের এমন লোকদের সূচক খুঁজে বের করতে হবে যাদের পছন্দের কোম্পানির তালিকা অন্য কোনো পছন্দের কোম্পানির তালিকার উপসেট নয়।
সুতরাং, যদি ইনপুট পছন্দের কোম্পানির মত হয় =[["TCS", "google", "facebook"], ["google","microsoft"], ["google", "facebook"], ["google"], ["amazon"]], তাহলে আউটপুট হবে [0,1,4], কারণ index=2 এর ব্যক্তির ["google", "facebook"] আছে যা পছন্দের কোম্পানিগুলির একটি উপসেট[0]=[" TCS", "google", "facebook"] সূচক 0 সহ ব্যক্তির সাথে সম্পর্কিত।
এখন ইনডেক্স=3 সহ ব্যক্তির কাছে ["google"] আছে যা প্রিয় কোম্পানির একটি উপসেট[0]=["TCS", "google", "facebook"] এবং favorite কোম্পানি[1]=["google", "microsoft"] . পছন্দের কোম্পানির অন্যান্য তালিকা অন্য তালিকার উপসেট নয়, তাই, উত্তর হল [0,1,4]।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ফাংশন সংজ্ঞায়িত করুন ঠিক আছে(), এটি একটি অ্যারে, একটি অ্যারে বি,
নেবে -
cnt :=0, i :=0, j :=0
-
প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
-
একটি সেট s
সংজ্ঞায়িত করুন -
n :=f
এর আকার -
আরম্ভ করার জন্য i :=0, যখন i
-
f[i]
অ্যারে সাজান
-
-
আরম্ভ করার জন্য i :=0, যখন i
-
c :=সত্য
-
j শুরু করার জন্য :=0, যখন j
করুন -
যদি আমি j এর মত হয়, তাহলে −
-
নিম্নলিখিত অংশটি উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তিতে যান
-
-
c :=c এবং ঠিক আছে(f[i], f[j])
-
-
যদি c অ-শূন্য হয়, তাহলে −
-
s
তে i ঢোকান
-
-
-
একটি অ্যারে হিসাবে 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, ]