1253. Reconstruct a 2-Row Binary Matrix
Description
Given the following details of a matrix with n
columns and 2
rows :
- The matrix is a binary matrix, which means each element in the matrix can be
0
or1
. - The sum of elements of the 0-th(upper) row is given as
upper
. - The sum of elements of the 1-st(lower) row is given as
lower
. - The sum of elements in the i-th column(0-indexed) is
colsum[i]
, wherecolsum
is given as an integer array with lengthn
.
Your task is to reconstruct the matrix with upper
, lower
and colsum
.
Return it as a 2-D integer array.
If there are more than one valid solution, any of them will be accepted.
If no valid solution exists, return an empty 2-D array.
Example 1:
Input: upper = 2, lower = 1, colsum = [1,1,1] Output: [[1,1,0],[0,0,1]] Explanation: [[1,0,1],[0,1,0]], and [[0,1,1],[1,0,0]] are also correct answers.
Example 2:
Input: upper = 2, lower = 3, colsum = [2,2,1,1] Output: []
Example 3:
Input: upper = 5, lower = 5, colsum = [2,1,2,0,1,0,1,2,0,1] Output: [[1,1,1,0,1,0,0,1,0,0],[1,0,1,0,0,0,1,1,0,1]]
Constraints:
1 <= colsum.length <= 10^5
0 <= upper, lower <= colsum.length
0 <= colsum[i] <= 2
Solutions
Solution 1: Greedy
First, we create an answer array \(ans\), where \(ans[0]\) and \(ans[1]\) represent the first and second rows of the matrix, respectively.
Next, we traverse the array \(colsum\) from left to right. For the current element \(colsum[j]\), we have the following cases:
- If \(colsum[j] = 2\), then we set both \(ans[0][j]\) and \(ans[1][j]\) to \(1\). In this case, both \(upper\) and \(lower\) are reduced by \(1\).
- If \(colsum[j] = 1\), then we set either \(ans[0][j]\) or \(ans[1][j]\) to \(1\). If \(upper \gt lower\), then we prefer to set \(ans[0][j]\) to \(1\); otherwise, we prefer to set \(ans[1][j]\) to \(1\). In this case, either \(upper\) or \(lower\) is reduced by \(1\).
- If \(colsum[j] = 0\), then we set both \(ans[0][j]\) and \(ans[1][j]\) to \(0\).
- If \(upper \lt 0\) or \(lower \lt 0\), then it is impossible to construct a matrix that meets the requirements, and we return an empty array.
At the end of the traversal, if both \(upper\) and \(lower\) are \(0\), then we return \(ans\); otherwise, we return an empty array.
The time complexity is \(O(n)\), where \(n\) is the length of the array \(colsum\). Ignoring the space consumption of the answer array, the space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|