मान लीजिए कि ऐसे 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]]
हो सकते हैं।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक नक्शा बनाएं मी
- i श्रेणी में 0 से दिए गए सरणी के आकार के लिए a – 1
- i को m[g[i]] में डालें
- रेस नामक एक मैट्रिक्स बनाएं
- मैप में प्रत्येक तत्व के लिए मैं
- जे के लिए 0 श्रेणी में i पर मौजूद सूची के आकार के लिए
- i के सरणी के jth तत्व को अस्थायी में डालें
- यदि अस्थायी का आकार =i की कुंजी
- फिर नई पंक्ति के रूप में res में अस्थायी डालें
- अस्थायी सरणी साफ़ करें
- जे के लिए 0 श्रेणी में i पर मौजूद सूची के आकार के लिए
- रिटर्न रेस.
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<auto> > v){
cout << "[";
for(int i = 0; i<v.size(); i++){
cout << "[";
for(int j = 0; j <v[i].size(); j++){
cout << v[i][j] << ", ";
}
cout << "],";
}
cout << "]"<<endl;
}
class Solution {
public:
vector<vector<int>> groupThePeople(vector<int>& g) {
map <int, vector <int> > m;
for(int i = 0; i < g.size(); i++){
m[g[i]].push_back(i);
}
vector < vector <int> > res;
map <int, vector <int> > :: iterator i = m.begin();
vector <int> temp;
while(i != m.end()){
for(int j = 0; j < i->second.size(); j++){
temp.push_back(i->second[j]);
if(temp.size() == i->first){
res.push_back(temp);
temp.clear();
}
}
i++;
}
return res;
}
};
main(){
vector<int> v = {3,3,3,3,3,1,3};
Solution ob;
print_vector(ob.groupThePeople(v));
} इनपुट
[3,3,3,3,3,1,3]
आउटपुट
[[5, ],[0, 1, 2, ],[3, 4, 6, ],]