跳到主要内容

1072.按列翻转得到最大值等行数

链接:1072.按列翻转得到最大值等行数
难度:Medium
标签:数组、哈希表、矩阵
简介:给定 m x n 矩阵 matrix 。你可以从中选出任意数量的列并翻转其上的 每个 单元格。(即翻转后,单元格的值从 0 变成 1,或者从 1 变为 0 。)返回 经过一些翻转后,行与行之间所有值都相等的最大行数 。

题解 1 - cpp

  • 编辑时间:2023-05-15
  • 执行用时:352ms
  • 内存消耗:69MB
  • 编程语言:cpp
  • 解法介绍:按照行首的值进行反转。
class Solution {
public:
int maxEqualRowsAfterFlips(vector<vector<int>>& matrix) {
unordered_map<string, int> m;
for (auto &row : matrix) {
string s = "";
for (auto &v : row) {
s += to_string(v ^ row[0]);
}
m[s]++;
}
int res = 0;
for (auto &item : m) {
res = max(res, item.second);
}
return res;
}
};

题解 2 - rust

  • 编辑时间:2023-05-15
  • 执行用时:28ms
  • 内存消耗:3.2MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn max_equal_rows_after_flips(matrix: Vec<Vec<i32>>) -> i32 {
let mut m = std::collections::HashMap::<String, i32>::new();
for row in matrix {
let mut s = String::new();
for v in &row {
s.push(((*v ^ row[0]) as u8 + b'0') as char);
}
*m.entry(s).or_insert(0) += 1;
}
let mut res = 0;
for (_, v) in m.into_iter() {
res = res.max(v);
}
res
}
}

题解 3 - python

  • 编辑时间:2023-05-15
  • 执行用时:248ms
  • 内存消耗:18.6MB
  • 编程语言:python
  • 解法介绍:同上。
class Solution:
def maxEqualRowsAfterFlips(self, matrix: List[List[int]]) -> int:
m = Counter()
for row in matrix:
s = ""
for v in row:
s += str(v ^ row[0])
m[s] += 1
res = 0
for v in m.values():
res = max(res, v)
return res