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

समूह आकार को देखते हुए लोगों को समूहित करें, वे C++ में हैं

मान लीजिए कि ऐसे 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 में अस्थायी डालें
        • अस्थायी सरणी साफ़ करें
  • रिटर्न रेस.

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

उदाहरण

#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, ],]

  1. सी ++ में ग्रिड में दी गई दिशा में संभावित चालों की गणना करें

    हम दो चर n और m हैं जो n x m आकार के ग्रिड का प्रतिनिधित्व करते हैं और प्रारंभिक बिंदु x, y से शुरू करते हैं। कदमों/चालों के जोड़े भी दिए गए हैं जिन्हें चाल ((1,1), (2,2)) आदि के रूप में ग्रिड के अंदर ले जाया जा सकता है। चालों की प्रत्येक जोड़ी x,y अक्ष में उठाए गए कदमों की इकाई का प्रतिनिधित्व करत

  1. C++ . में भूलभुलैया III

    मान लीजिए कि खाली जगह और दीवारों के साथ एक भूलभुलैया है और उस भूलभुलैया में एक गेंद भी है। गेंद ऊपर (यू), नीचे (डी), बाएं (एल) या दाएं (आर) दिशाओं को लुढ़क कर खाली जगहों से जा सकती है, लेकिन यह दीवार से टकराने तक लुढ़कती रहती है। जब गेंद रुकती है, तो वह अगली दिशा चुन सकती है। उस भूलभुलैया में एक छेद

  1. C++ मानक में int, long type का आकार क्या है?

    C++ मानक बाइट्स में इंटीग्रल प्रकार के आकार को निर्दिष्ट नहीं करता है। यह उस न्यूनतम सीमा को निर्दिष्ट करता है जिसे इन प्रकारों को धारण करने में सक्षम होना चाहिए। बिट्स में आकार निर्दिष्ट न्यूनतम सीमा से आसानी से पाया जा सकता है। मानक का जिक्र नहीं है लेकिन विभिन्न प्लेटफॉर्म के लिए आमतौर पर उपयोग