返回

C/C++ 1252. 奇数值单元格的数目

后端

本文主要介绍了C/C++ 1252. 奇数值单元格的数目 这道LeetCode题目,文中介绍了题目的详细、题目要求、题目难度、题目整理、题目分类以及具体的实现方法和示例代码,方便大家学习使用。

题目

给定一个 n x n 的矩阵 grid ,其中每个单元格都包含一个 0 或 1 。一个 grid 的 行 是 奇数 行 当且仅当 grid[i].length == n 且存在某个整数 j 使得:

  • 对于所有的 0 <= x < n,满足:grid[i][x] == grid[i][j]
  • 对于所有的 0 <= y < n,满足:grid[i][y] == grid[j][y]

一个 grid 的 列 是 奇数 列 当且仅当 grid.length == n 且存在某个整数 j 使得:

  • 对于所有的 0 <= x < n,满足:grid[x][i] == grid[j][i]
  • 对于所有的 0 <= y < n,满足:grid[x][i] == grid[x][j]

请你统计出所有满足以下条件的单元格的数量:

  • 该单元格位于奇数行且奇数列
  • 该单元格位于偶数行且偶数列

题目整理

  • 难度: 简单
  • 分类: 数组、模拟
  • 要点:
    • 奇数行:grid[i].length == n 且存在某个整数 j 使得:对于所有的 0 <= x < n,满足:grid[i][x] == grid[i][j];对于所有的 0 <= y < n,满足:grid[i][y] == grid[j][y]
    • 奇数列:grid.length == n 且存在某个整数 j 使得:对于所有的 0 <= x < n,满足:grid[x][i] == grid[j][i];对于所有的 0 <= y < n,满足:grid[x][i] == grid[x][j]
  • 思路:
    • 遍历矩阵,对于每个单元格,判断其所在的行和列是否是奇数行和奇数列。如果是,则将其计数器加 1。
    • 最后,返回计数器的值。

实现

class Solution {
public:
    int oddCells(int n, int m, vector<vector<int>>& indices) {
        vector<int> rows(n, 0);
        vector<int> cols(m, 0);

        for (const auto& index : indices) {
            rows[index[0]]++;
            cols[index[1]]++;
        }

        int count = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if ((rows[i] + cols[j]) % 2 == 1) {
                    count++;
                }
            }
        }

        return count;
    }
};

复杂度分析

  • 时间复杂度: O(n * m + k),其中 n 是矩阵的行数,m 是矩阵的列数,k 是索引数组 indices 的长度。
  • 空间复杂度: O(n + m),其中 n 是矩阵的行数,m 是矩阵的列数。

结语

这道题目是一个比较简单的模拟题,只需要遍历矩阵,统计满足条件的单元格数量即可。希望本文对您有所帮助,如果您有任何疑问,欢迎在评论区留言。