返回
C/C++ 1252. 奇数值单元格的数目
后端
2023-11-11 01:14:44
本文主要介绍了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 是矩阵的列数。
结语
这道题目是一个比较简单的模拟题,只需要遍历矩阵,统计满足条件的单元格数量即可。希望本文对您有所帮助,如果您有任何疑问,欢迎在评论区留言。