carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode1252:奇数值单元格的数目(cells_with_odd_values_in_a_matrix) #198

Open carloscn opened 1 year ago

carloscn commented 1 year ago

问题描述

给你一个 m x n 的矩阵,最开始的时候,每个单元格中的值都是 0。

另有一个二维索引数组 indices,indices[i] = [ri, ci] 指向矩阵中的某个位置,其中 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。

对 indices[i] 所指向的每个位置,应同时执行下述增量操作:

ri 行上的所有单元格,加 1 。 ci 列上的所有单元格,加 1 。 给你 m、n 和 indices 。请你在执行完所有 indices 指定的增量操作后,返回矩阵中 奇数值单元格 的数目。

示例 1:

image

输入: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:

image

输入: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  

进阶:你可以设计一个时间复杂度为 O(n + m + indices.length) 且仅用 O(n + m) 额外空间的算法来解决此问题吗?

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/cells-with-odd-values-in-a-matrix 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

carloscn commented 1 year ago

问题分析

fn increase_row(inv:&mut Vec<Vec<i32>>, row_num:usize)
{
    for i in 0..inv[0].len() {
        inv[row_num][i] += 1;
    }
}

fn increase_col(inv:&mut Vec<Vec<i32>>, col_num:usize)
{
    for i in 0..inv.len() {
        inv[i][col_num] += 1;
    }
}

pub fn odd_cells(m: i32, n: i32, indices: Vec<Vec<i32>>) -> i32
{
    let mut ret:i32 = 0;

    if m < 1 || n < 1 || indices.len() < 1 {
        return ret;
    }

    let mut inv:Vec<Vec<i32>> = vec![];

    for i in 0..m {
        let mut t:Vec<i32> = vec![0; n as usize];
        inv.push(t);
    }

    for e in &indices {
        increase_row(&mut inv, e[0] as usize);
        increase_col(&mut inv, e[1] as usize);
    }

    for i in 0..inv.len() * inv[0].len() {
        if inv[i % inv.len()][i/inv.len()] & 0x1 == 1 {
            ret += 1;
        }
    }

    return ret;
}
carloscn commented 1 year ago

code

https://review.gerrithub.io/c/carloscn/structstudy/+/553026 https://github.com/carloscn/structstudy/commit/92531964f19654ee082405798d45f19d2f3d74f8