ধরুন n লোক আছে যাদের আইডি 0 থেকে n - 1 রেঞ্জের মধ্যে এবং প্রতিটি ব্যক্তি ঠিক একটি গ্রুপের অন্তর্গত। আমাদের দৈর্ঘ্য n এর অ্যারে গ্রুপ সাইজ আছে। এই অ্যারেটি নির্দেশ করছে যে প্রতিটি ব্যক্তি যে গোষ্ঠীর আকারের অন্তর্গত, আমাদের সেখানে যে গোষ্ঠীগুলি রয়েছে এবং প্রতিটি গোষ্ঠীর অন্তর্ভুক্ত লোকের আইডিগুলি খুঁজে বের করতে হবে৷
ধরুন ইনপুট হল − [3,3,3,3,3,1,3], তাহলে আউটপুট হল [[5], [0, 1, 2], [3, 4, 6]], অন্যান্য সম্ভাব্য সমাধান হতে পারে [[2,1,6],[5], [0,4,3]] বা [[5], [0,6,2], [4,3,1]]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি মানচিত্র তৈরি করুন m
- এর জন্য 0 থেকে প্রদত্ত অ্যারের আকার - 1
- পরিসরে
- m[g[i]] এ ঢোকান
- রেস নামে একটি ম্যাট্রিক্স তৈরি করুন
- প্রতিটি উপাদানের জন্য i মানচিত্রে m
- i
- temp-এ i-এর অ্যারের jth উপাদান সন্নিবেশ করান
- যদি temp এর আকার =i
- এর কী
- তারপর নতুন সারি হিসাবে res-এ temp সন্নিবেশ করুন
- টেম্প অ্যারে সাফ করুন
- -এ উপস্থিত তালিকার আকার 0 থেকে সীমার মধ্যে j-এর জন্য
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#includenamespace ব্যবহার করে std;void print_vector(vector > v){ cout <<"["; for(int i =0; i > groupThePeople(vector &g) { মানচিত্র > m; for(int i =0; i > res; মানচিত্র > ::পুনরাবৃত্তিকারী i =m.begin(); ভেক্টর temp; while(i !=m.end()){ for(int j =0; j second.size(); j++){ temp.push_back(i->সেকেন্ড[j]); if(temp.size() ==i->first){ res.push_back(temp); temp.clear(); } } i++; } রিটার্ন রিটার্ন; }};প্রধান(){ ভেক্টর v ={3,3,3,3,3,1,3}; সমাধান ob; print_vector(ob.groupThePeople(v));}
ইনপুট
[3,3,3,3,3,1,3]