链接:https://leetcode-cn.com/problems/flip-columns-for-maximum-number-of-equal-rows/
经过若干次列翻转后,如果两行能同时满足行上所有值都相等,那么在翻转之前这两行要么相等要么互反(0-1)。因此统计最多的相等或互反的行数即可。可以借助把数组转为字符串的函数以及hashmap来求解。
java代码:
class Solution {
public int maxEqualRowsAfterFlips(int[][] matrix) {
int ans = 0;
Map<String,Integer>m = new HashMap();
for(int i = 0;i<matrix.length;i++)
{
if(matrix[i][0] == 0)//统一把每行第一个数翻转为1,不影响结果
for (int j = 0;j<matrix[0].length;j++)
matrix[i][j] ^=1;
String key = Arrays.toString(matrix[i]);
m.put(key,m.getOrDefault(key,0)+1);
}
for( String key:m.keySet())
ans = Math.max(ans,m.get(key));
return ans;
}
}