2023-05-15每日一题
一、题目编号
1072. 按列翻转得到最大值等行数
二、题目链接
点击跳转到题目位置
三、题目描述
给定 m x n 矩阵 matrix 。
你可以从中选出任意数量的列并翻转其上的 每个 单元格。(即翻转后,单元格的值从 0 变成 1,或者从 1 变为 0 。)
返回 经过一些翻转后,行与行之间所有值都相等的最大行数
四、解题代码
class Solution {
unordered_map<string, int> hash;
public:
int maxEqualRowsAfterFlips(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
for(int i = 0; i < m; ++i){
string tmp;
for(int j = 0; j < n; ++j){
tmp += char(matrix[i][j] + '0');
}
if(tmp[0] == '1'){
for(int k = 0; k < n; ++k){
if(tmp[k] == '0'){
tmp[k] = '1';
} else{
tmp[k] = '0';
}
}
}
hash[tmp]++;
}
int max0 = 0;
for(auto iter = hash.begin(); iter != hash.end(); ++iter){
max0 = max(max0, iter->second);
}
return max0;
}
};
五、解题思路
(1) 首先思考一个问题,如果光给一行元素的话,那么行与行之间所有值都相等的最大行数是多少。那么很显然,是1。
(2) 接着思考下一个问题,如果光给两行元素的话,那么行与行之间所有值都相等的最大行数是多少。那么很显然,至少为1,可能为2。那么怎么可能为2呢。
假设两行为 1 1 1 和 1 1 1(本身就相等),那么一定为2,。如果为 1 1 0 和 0 0 1,那么也为2,翻转第三列即可。
(3) 那么我们便拥有了思路,得出每一行的数字字符串,如果字符串第一个字符为‘0’,那么直接在哈希表中将该种字符串的数量+1,如果第一个字符为‘1’,那么先翻转该字符串,再直接在哈希表中将该种字符串的数量加一。文章来源:https://www.toymoban.com/news/detail-445905.html
(4) 最后返回哈希表中某种字符串数量的最大值即可。文章来源地址https://www.toymoban.com/news/detail-445905.html
到了这里,关于2023-05-15LeetCode每日一题(按列翻转得到最大值等行数)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!