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

C++ में समूह आकार के अनुसार लोगों को समूहित करना


मान लीजिए n लोग हैं जिनके ID 0 से n-1 की रेंज में हैं और प्रत्येक व्यक्ति ठीक एक समूह से संबंधित है। हमारे पास groupSizes नामक लंबाई n की एक सरणी है। यह सरणी दर्शाती है कि प्रत्येक व्यक्ति किस समूह आकार से संबंधित है, हमें वे समूह ढूंढने हैं जो वहां हैं और प्रत्येक समूह में शामिल लोगों के ID।

मान लीजिए इनपुट है: [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 बनाएं
  • i = 0 से दी गई सरणी a का आकार - 1 तक:
    • i को m[g[i]] में डालें
  • res नामक एक मैट्रिक्स बनाएं
  • मैप m में प्रत्येक तत्व i के लिए:
    • j = 0 से i पर मौजूद सूची का आकार तक:
      • i की सरणी के jवें तत्व को temp में डालें
      • यदि temp का आकार = i की कुंजी:
        • तब temp को res में नई पंक्ति के रूप में डालें
        • temp सरणी को साफ़ करें
  • 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; 
    } 
}; 

int 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. ग्रिड में दी गई दिशा में संभावित चालों की गणना करने का C++ प्रोग्राम ग्रिड में दी गई दिशा में संभावित चालों की गणना करने का C++ प्रोग्राम

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

  1. भूलभुलैया III - C++ भूलभुलैया III - C++

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

  1. - C++ स्टैंडर्ड में int, long टाइप का आकार क्या है?

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