สมมติว่าเรามีรายละเอียดของเมทริกซ์ที่มี n คอลัมน์และ 2 แถว -
- องค์ประกอบเมทริกซ์จะเป็น 0 หรือ 1
- ผลรวมขององค์ประกอบของแถวที่ 0 (บน) ถูกกำหนดไว้ด้านบน
- ผลรวมขององค์ประกอบของแถวที่ 1 (ล่าง) มีค่าน้อยกว่า
- ผลรวมขององค์ประกอบในคอลัมน์ i-th(0-indexed) คือ colsum[i] โดยที่ colsum ถูกกำหนดเป็นอาร์เรย์จำนวนเต็มโดยมีความยาว n
ภารกิจคือการสร้างเมทริกซ์ขึ้นใหม่ด้วยบน ล่าง และโคลซัม เราต้องหามันเป็นอาร์เรย์จำนวนเต็ม 2 มิติ หากมีวิธีแก้ไขที่ถูกต้องมากกว่าหนึ่งวิธี จะยอมรับวิธีใดวิธีหนึ่ง หากไม่มีวิธีแก้ปัญหาที่ถูกต้อง ให้ส่งคืนอาร์เรย์ 2D ที่ว่างเปล่า ดังนั้นหากอินพุตเป็นเหมือน upper =2, lower =3 และ colsum เป็น [1,1,1] เอาต์พุตจะเป็น [[1,1,0],[0,0,1]]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- set flag :=true, n :=size of c สร้างหนึ่งอาร์เรย์ตามลำดับ 2 * n
- สำหรับฉันอยู่ในช่วง 0 ถึง n
- ถ้า c[i] =2 แล้ว
- ลด u และ l ลง 1
- ถ้าคุณ <0 หรือ l <0 ให้ตั้งค่าสถานะ :=false
- ใส่ ans[0, i] =1 และ ans[1, i] =1
- อย่างอื่นถ้า c[i] =1 แล้ว
- ถ้า u> l แล้วลด u ลง 1, ans[0, i] :=1
- มิฉะนั้น เมื่อ u
- มิฉะนั้น เมื่อ c[i] =1
- ถ้า u> 0 ให้ลด u ลง 1 และ ans[0, i] :=1
- มิฉะนั้น l> 0 จากนั้นลด l ขึ้น 1 และ ans[1, i] :=1
- มิฉะนั้น ตั้งค่าสถานะ :=false
- มิฉะนั้น c[i] =0
- ถ้า c[i]> 0 ให้ตั้งค่าสถานะ :=false
- มิฉะนั้น ตั้งค่าสถานะ :=false
- ถ้า c[i] =2 แล้ว
- ถ้าแฟล็กเป็นเท็จหรือ u ไม่ใช่ 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, ],]