1072. Flip Columns For Maximum Number of Equal Rows
SourceWeekly Contest 139 Q2DifficultyMediumRating1797
Description
You are given an m x n binary matrix matrix.
You can choose any number of columns in the matrix and flip every cell in that column (i.e., Change the value of the cell from 0 to 1 or vice versa).
Return the maximum number of rows that have all values equal after some number of flips.
Example 1:
Input: matrix = [[0,1],[1,1]] Output: 1 Explanation: After flipping no values, 1 row has all values equal.
Example 2:
Input: matrix = [[0,1],[1,0]] Output: 2 Explanation: After flipping values in the first column, both rows have equal values.
Example 3:
Input: matrix = [[0,0,0],[0,0,1],[1,1,0]] Output: 2 Explanation: After flipping values in the first two columns, the last two rows have equal values.
Constraints:
m == matrix.lengthn == matrix[i].length1 <= m, n <= 300matrix[i][j]is either0or1.
Solutions
Solution 1
Thinking
After some column flips, identical rows become all zeros or all ones. Two rows can become equal iff they are equal or bitwise complements. \(m,n\le 300\) rules out enumerating \(2^n\) flip masks.
Normalize each row so the first bit is \(0\) (flip the whole row when it starts with \(1\)). Complements then share a key.
A counter of those tuples; the maximum frequency is the answer.
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |