LeetCode //C - 1252. Cells with Odd Values in a Matrix

1252. Cells with Odd Values in a Matrix

There is an m x n matrix that is initialized to all 0's. There is also a 2D array indices where each i n d i c e s i = r i , c i indicesi = r_i, c_i indicesi=ri,ci represents a 0-indexed location to perform some increment operations on the matrix.

For each location indicesi, do both of the following:

  1. Increment all the cells on row r i r_i ri.
  2. Increment all the cells on column c i c_i ci.

Given m, n, and indices, return the number of odd-valued cells in the matrix after applying the increment to all locations in indices.

Example 1:

Input: m = 2, n = 3, indices = \[0,1,1,1]

Output: 6

Explanation: Initial matrix = \[0,0,0,0,0,0].

After applying first increment it becomes \[1,2,1,0,1,0].

The final matrix is \[1,3,1,1,3,1], which contains 6 odd numbers.

Example 2:

Input: m = 2, n = 2, indices = \[1,1,0,0]

Output: 0

Explanation: Final matrix = \[2,2,2,2]. There are no odd numbers in the final matrix.

Constraints:
  • 1 <= m, n <= 50
  • 1 <= indices.length <= 100
  • 0 < = r i < m 0 <= r_i < m 0<=ri<m
  • 0 < = c i < n 0 <= c_i < n 0<=ci<n

From: LeetCode

Link: 1252. Cells with Odd Values in a Matrix


Solution:

Ideas:
  • Instead of updating the whole matrix, only track how many times each row and column is incremented.
  • Use two arrays:
    • rowsi = number of increments on row i
    • colsj = number of increments on column j
  • For each operation r, c, do:
    • rowsr++
    • colsc++
  • A cell (i, j) is incremented rowsi + colsj times.
  • If (rowsi + colsj) is odd, that cell is odd.
  • Count all such cells.
Code:
c 复制代码
int oddCells(int m, int n, int** indices, int indicesSize, int* indicesColSize) {
    int rows[50] = {0};
    int cols[50] = {0};

    for (int i = 0; i < indicesSize; i++) {
        rows[indices[i][0]]++;
        cols[indices[i][1]]++;
    }

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

    return ans;
}
相关推荐
Nil2083 小时前
leetcode 118杨辉三角
算法·leetcode·职场和发展
wanderist.6 小时前
线性筛法详解:从筛质数到欧拉函数、Möbius 函数与约数函数
java·数据结构·算法
All for pursuit.6 小时前
【设计-1】208.实现Trie (前缀树)
数据结构·c++·算法·leetcode
weixin_307779136 小时前
C++代码实现MATLAB中的crossval函数功能
开发语言·c++·算法·matlab
青少儿编程课堂6 小时前
背包问题(0/1 背包与完全背包)解题精讲——动态规划入门
c++·python·算法·bfs·信息学竞赛
光影少年7 小时前
为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
前端·javascript·算法
Escalating_xu7 小时前
【C 语言】深入理解指针(5):sizeof、strlen、数组名语义与指针笔试题全解析
java·c语言·开发语言
HEJOO97 小时前
Linux 设备驱动系列——使用全局工作队列
java·linux·算法
Code_Solitude7 小时前
c语言:递归
java·c语言·算法
万年咸鱼8 小时前
解决C语言的内存释放机制
java·c语言·python