LeetCode 每日一题
题目链接
https://leetcode.cn/problems/cells-with-odd-values-in-a-matrix/
题目描述
奇数值单元格的数目
给你一个 m x n 的矩阵,最开始的时候,每个单元格中的值都是 0。
另有一个二维索引数组 indices,indices[i] = [ri, ci] 指向矩阵中的某个位置,其中 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。
对 indices[i] 所指向的每个位置,应同时执行下述增量操作:
ri 行上的所有单元格,加 1 。
ci 列上的所有单元格,加 1 。
给你 m、n 和 indices 。请你在执行完所有 indices 指定的增量操作后,返回矩阵中 奇数值单元格 的数目。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/cells-with-odd-values-in-a-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例 1:
输入:m = 2, n = 3, indices = [[0,1],[1,1]]
输出:6
解释:最开始的矩阵是 [[0,0,0],[0,0,0]]。
第一次增量操作后得到 [[1,2,1],[0,1,0]]。
最后的矩阵是 [[1,3,1],[1,3,1]],里面有 6 个奇数。
示例 2:
输入:m = 2, n = 2, indices = [[1,1],[0,0]]
输出:0
解释:最后的矩阵是 [[2,2],[2,2]],里面没有奇数。
提示:
- 1 <= m, n <= 50
- 1 <= indices.length <= 100
- 0 <= ri < m
- 0 <= ci < n
分析
见题解中注释
题解
class Solution {
public int oddCells(int m, int n, int[][] indices) {
int count = 0;
int[][] arr = new int[m][n];
for (int i = 0; i < indices.length; i++) {
int[] indice = indices[i];
// 获取指向的位置
int x = indice[0];
int y = indice[1];
// 指定行的数字 + 1
for (int p = 0; p < m; p++) {
arr[p][y] += 1;
}
// 指定列的数字 + 1
for (int q = 0; q < n; q++) {
arr[x][q] += 1;
}
// System.out.println(Arrays.toString(arr));
}
// 计算奇数值的单元格
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if ((arr[i][j] & 1)== 1){
count++;
}
}
}
return count;
}
}
运行结果
补充一下
- 注意看第二次提交的耗时,因为忘记了屏蔽代码中的 System.out.println(“”),所以导致耗时大幅提升。
- 这也是为什么实际开发中,禁止使用 System.out.println 来打印日志的原因,尤其在高并发场景下,大量的 System.out.println 很有可能会导致宕机。至于原因:
- 懂得都懂吧~