|
| 1 | +# 奇数值单元格的数目 |
| 2 | + |
| 3 | +> 难度:简单 |
| 4 | +> |
| 5 | +> https://leetcode.cn/problems/cells-with-odd-values-in-a-matrix/ |
| 6 | +
|
| 7 | +## 题目 |
| 8 | + |
| 9 | +给你一个 `m x n` 的矩阵,最开始的时候,每个单元格中的值都是 `0`。 |
| 10 | + |
| 11 | +另有一个二维索引数组 `indices`,`indices[i] = [ri, ci]` 指向矩阵中的某个位置,其中 `ri` 和 `ci` 分别表示指定的行和列(从 `0` 开始编号)。 |
| 12 | + |
| 13 | +对 `indices[i]` 所指向的每个位置,应同时执行下述增量操作: |
| 14 | + |
| 15 | +- `ri` 行上的所有单元格,加 `1` 。 |
| 16 | +- `ci` 列上的所有单元格,加 `1` 。 |
| 17 | + |
| 18 | +给你 `m`、`n` 和 `indices` 。请你在执行完所有 `indices` 指定的增量操作后,返回矩阵中 **奇数值单元格** 的数目。 |
| 19 | + |
| 20 | +### 示例 |
| 21 | + |
| 22 | +#### 示例 1: |
| 23 | + |
| 24 | + |
| 25 | + |
| 26 | +``` |
| 27 | +输入:m = 2, n = 3, indices = [[0,1],[1,1]] |
| 28 | +输出:6 |
| 29 | +解释:最开始的矩阵是 [[0,0,0],[0,0,0]]。 |
| 30 | +第一次增量操作后得到 [[1,2,1],[0,1,0]]。 |
| 31 | +最后的矩阵是 [[1,3,1],[1,3,1]],里面有 6 个奇数。 |
| 32 | +``` |
| 33 | + |
| 34 | +#### 示例 2: |
| 35 | + |
| 36 | + |
| 37 | + |
| 38 | +``` |
| 39 | +输入:m = 2, n = 2, indices = [[1,1],[0,0]] |
| 40 | +输出:0 |
| 41 | +解释:最后的矩阵是 [[2,2],[2,2]],里面没有奇数。 |
| 42 | +``` |
| 43 | + |
| 44 | +## 解题 |
| 45 | + |
| 46 | +```ts |
| 47 | +/** |
| 48 | + * 模拟 |
| 49 | + * @desc 时间复杂度 O(q + m + n) 空间复杂度 O(m + n) |
| 50 | + * @param m |
| 51 | + * @param n |
| 52 | + * @param indices |
| 53 | + * @returns |
| 54 | + */ |
| 55 | +export function oddCells(m: number, n: number, indices: number[][]): number { |
| 56 | + const rows = new Array(m).fill(0) |
| 57 | + const cols = new Array(n).fill(0) |
| 58 | + |
| 59 | + for (const [r, c] of indices) { |
| 60 | + rows[r]++ |
| 61 | + cols[c]++ |
| 62 | + } |
| 63 | + |
| 64 | + let oddx = 0 |
| 65 | + let oddy = 0 |
| 66 | + |
| 67 | + for (const row of rows) |
| 68 | + if ((row & 1) !== 0) oddx++ |
| 69 | + |
| 70 | + for (const col of cols) |
| 71 | + if ((col & 1) !== 0) oddy++ |
| 72 | + |
| 73 | + return oddx * (n - oddy) + (m - oddx) * oddy |
| 74 | +} |
| 75 | +``` |
0 commit comments