在leetcode上刷了接近100题了吧,参加了139周赛。。
然而第二题就卡住了。。一开始想着用动态规划,但是越想越复杂。。除了暴力解没有其他有效的方法能说服自己。
https://leetcode-cn.com/contest/weekly-contest-139/problems/flip-columns-for-maximum-number-of-equal-rows/
5077. 按列翻转得到最大值等行数 显示英文描述 我的提交返回竞赛
题目难度 Medium
给定由若干 0 和 1 组成的矩阵 matrix,从中选出任意数量的列并翻转其上的 每个 单元格。翻转后,单元格的值从 0 变成 1,或者从 1 变为 0 。
返回经过一些翻转后,行上所有值都相等的最大行数。
其中一个大神的代码是这样的,但是没理解为什么能这么处理。。
class Solution {
public:
int maxEqualRowsAfterFlips(vector<vector>& a) {
int n = a.size();
int m = a[0].size();
map<vector, int> F;
for (int i = 0; i < n; ++ i)
{
if (a[i][0] == 1)
{
for (int j = 0; j < m; ++ j)
a[i][j] ^= 1;
}
F[a[i]] ++;
}
int ans = 0;
for (auto p : F)
ans = max(ans, p.second);
return ans;
}
};