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