翻转-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;
    }

  

 

posted @ 2020-02-20 11:04  hyserendipity  阅读(188)  评论(0编辑  收藏  举报