翻转-Flip Columns For Maximum Number of Equal Rows
2020-02-20 11:00:06
问题描述:
问题求解:
翻转题一个常见的思路就是站在结束的状态来反推最初的状态,本题的解题思路就是站在结束的时候的状态来进行反推。
如果在最终的状态i-row是全0,那么如果j-row也是全0,那么i,j最初的状态一定是一样的;如果j-row是全1,那么i,j最初的状态一定是完全相反的。
所以原问题就转化成了去求解matirx中相同或者完全相反的最多的行数是多少。
public int maxEqualRowsAfterFlips(int[][] matrix) { int res = 0; int m = matrix.length; int n = matrix[0].length; for (int i = 0; i < m; i++) { int cnt = 0; int[] flip = new int[n]; for (int j = 0; j < n; j++) flip[j] = 1 - matrix[i][j]; for (int j = 0; j < m; j++) { if (Arrays.equals(matrix[i], matrix[j]) || Arrays.equals(flip, matrix[j])) cnt += 1; } res = Math.max(res, cnt); } return res; }