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

C++ में 2-पंक्ति बाइनरी मैट्रिक्स का पुनर्निर्माण


मान लीजिए हमारे पास n कॉलम और 2 पंक्तियों वाले मैट्रिक्स का निम्नलिखित विवरण है:

  • मैट्रिक्स के तत्व या तो 0 या 1 होंगे
  • 0-वें (ऊपरी) पंक्ति के तत्वों का योग upper के रूप में दिया गया है।
  • 1-वें (निचली) पंक्ति के तत्वों का योग lower के रूप में दिया गया है।
  • i-वें कॉलम (0-इंडेक्स्ड) के तत्वों का योग colsum[i] है, जहां colsum लंबाई n का एक पूर्णांक सरणी के रूप में दिया गया है।

कार्य upper, lower और colsum के साथ मैट्रिक्स का पुनर्निर्माण करना है। हमें इसे 2D पूर्णांक सरणी के रूप में ढूंढना है। यदि एक से अधिक वैध समाधान हैं, तो उनमें से कोई भी स्वीकार किया जाएगा। यदि कोई वैध समाधान नहीं है, तो एक खाली 2D सरणी लौटाएं।

उदाहरण के लिए, यदि इनपुट upper = 2, lower = 3 और colsum = [1,1,1] है, तो आउटपुट [[1,1,0],[0,0,1]] होगा।

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:

  • flag := true, n := c का आकार, क्रम 2 * n की एक सरणी ans बनाएं
  • i को 0 से n तक लूप करें
    • यदि c[i] = 2, तो
      • u और l को 1 से घटाएं
      • यदि u < 0 या l < 0, तो flag := false
      • ans[0, i] = 1 और ans[1, i] = 1 रखें
    • अन्यथा यदि c[i] = 1, तो
      • यदि u > l, तो u को 1 से घटाएं, ans[0, i] := 1
      • अन्यथा जब u < l, तो l को 1 से घटाएं ans[1, i] := 1
      • अन्यथा जब c[i] = 1
        • यदि u > 0, तो u को 1 से घटाएं और ans[0, i] := 1
        • अन्यथा l > 0, तो l को 1 से घटाएं और ans[1, i] := 1
        • अन्यथा flag := false सेट करें
    • अन्यथा c[i] = 0
      • यदि c[i] > 0, तो flag := false सेट करें
    • अन्यथा flag := false सेट करें
  • यदि flag गलत है या u 0 नहीं है या l 0 नहीं है, तो खाली लौटाएं
  • ans लौटाएं

उदाहरण

#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>> reconstructMatrix(int u, int l, vector<int>& c) {       bool flag = true;       int n = c.size();       vector < vector <int> > ans(2, vector <int> (n));       for(int i = 0; i < n; i++){          if(c[i] == 2){             u--;             l--;             if(u<0 || l<0)flag = false;             ans[0][i] = 1;             ans[1][i] = 1;          }else if(c[i] == 1){             if(u>l){                   u--;                   ans[0][i] = 1;             }else if(u<l){                l--;                ans[1][i] = 1;             }else{                if(u>0){                   u--;                   ans[0][i] = 1;                }else if(l > 0){                   l--;                   ans[1][i] = 1;                }else                   flag = false;             }            }else if(c[i] == 0){          if(c[i]>0)flag = false;          }else{             flag = false;          }       }       if(!flag || u!=0 ||l!=0 )return {};       return ans;    } }; main(){    vector<int> v = {1,1,1};    Solution ob;    print_vector(ob.reconstructMatrix(2,1,v)); }

इनपुट

2 1 [1,1,1]

आउटपुट

[[1, 1, 0, ],[0, 0, 1, ],]

  1. C++ में बाइनरी मैट्रिक्स को शून्य मैट्रिक्स में बदलने के लिए न्यूनतम फ्लिप C++ में बाइनरी मैट्रिक्स को शून्य मैट्रिक्स में बदलने के लिए न्यूनतम फ्लिप

    मान लीजिए हमारे पास एक m x n बाइनरी मैट्रिक्स mat है। एक चरण में, हम एक सेल चुन सकते हैं और उसके बिट और उसके चारों पड़ोसियों (यदि मौजूद हों) को फ्लिप कर सकते हैं। हमें मैट्रिक्स को शून्य मैट्रिक्स में बदलने के लिए आवश्यक न्यूनतम चरणों की संख्या ज्ञात करनी है। यदि कोई समाधान नहीं है, तो -1 वापस करें।

  1. C++ में बाइनरी ट्री प्रिंट करना C++ में बाइनरी ट्री प्रिंट करना

    मान लीजिए हमें एक बाइनरी ट्री को m×n 2D स्ट्रिंग सरणी में इन नियमों के आधार पर प्रदर्शित करना है: पंक्ति संख्या m दी गई बाइनरी ट्री की ऊंचाई के समान होनी चाहिए। स्तंभ संख्या n हमेशा एक विषम संख्या होनी चाहिए। रूट नोड का मान पहली पंक्ति के ठीक बीच में रखा जाना चाहिए जहां इसे रखा जा सकता है। वह स्तं

  1. C++ में बाइनरी ट्री प्रूनिंग C++ में बाइनरी ट्री प्रूनिंग

    मान लीजिए हमारे पास एक बाइनरी ट्री का हेड नोड root है, जहाँ प्रत्येक नोड का मान या तो 0 या 1 है। हमें वही ट्री लौटाना है जहाँ हर वह सबट्री हटा दी गई हो जिसमें 1 नहीं है। उदाहरण: इनपुट ट्री [1,1,0,1,1,0,1,0] के लिए, आउटपुट ट्री में केवल वही नोड्स रहेंगे जिनके सबट्री में कम से कम एक 1 है। पोस्ट-ऑर्