मान लीजिए हमारे पास 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गलत है याu0 नहीं है याl0 नहीं है, तो खाली लौटाएं 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, ],]