मान लीजिए कि हमारे पास n कॉलम और 2 पंक्तियों वाले मैट्रिक्स का निम्नलिखित विवरण है -
- मैट्रिक्स तत्व या तो 0 या 1 होंगे
- 0-वें (ऊपरी) पंक्ति के तत्वों का योग ऊपरी के रूप में दिया गया है।
- पहली (निचली) पंक्ति के तत्वों का योग नीचे दिया गया है।
- i-वें स्तंभ (0-अनुक्रमित) में तत्वों का योग colsum[i] है, जहां कोलसम को लंबाई n के साथ एक पूर्णांक सरणी के रूप में दिया जाता है।
कार्य मैट्रिक्स को ऊपरी, निचले और कोलसम के साथ पुनर्निर्माण करना है। हमें इसे 2D पूर्णांक सरणी के रूप में खोजना होगा। यदि एक से अधिक वैध समाधान हैं, तो उनमें से कोई भी स्वीकार किया जाएगा। यदि कोई मान्य समाधान नहीं है, तो एक खाली 2D सरणी लौटाएं। इसलिए यदि इनपुट अपर =2, निचला =3 और कोलसम [1,1,1] जैसा है, तो आउटपुट [[1,1,0],[0,0,1]]
होगा।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- झंडा सेट करें:=सच, n:=c का आकार, क्रम 2 * n के अनुसार एक सरणी बनाएं
- मैं के लिए 0 से n की सीमा में
- अगर c[i] =2, तो
- यू और एल को 1 से घटाएं
- यदि आप <0 या l <0 हैं, तो ध्वजांकित करें:=असत्य
- उत्तर दें[0, i] =1 और ans[1, i] =1
- अन्यथा यदि c[i] =1, तो
- यदि आप> l, तो u को 1 से घटाएं, ans[0, i] :=1
- अन्यथा जब आप
- अन्यथा जब c[i] =1
- यदि u> 0 है, तो u को 1 से घटाएं और ans[0, i] :=1
- अन्यथा l> 0, फिर l को 1 से घटाएं और ans[1, i] :=1
- अन्यथा ध्वज सेट करें:=झूठा
- अन्यथा c[i] =0
- अगर c[i]> 0, तो फ़्लैग सेट करें :=false
- अन्यथा ध्वज सेट करें:=झूठा
- अगर c[i] =2, तो
- यदि ध्वज गलत है या आप 0 नहीं है या l 0 नहीं है, तो खाली लौटें
- वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#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, ],]