Open carloscn opened 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;
}
问题描述
给你一个 m x n 的矩阵,最开始的时候,每个单元格中的值都是 0。
另有一个二维索引数组 indices,indices[i] = [ri, ci] 指向矩阵中的某个位置,其中 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。
对 indices[i] 所指向的每个位置,应同时执行下述增量操作:
ri 行上的所有单元格,加 1 。 ci 列上的所有单元格,加 1 。 给你 m、n 和 indices 。请你在执行完所有 indices 指定的增量操作后,返回矩阵中 奇数值单元格 的数目。
示例 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
进阶:你可以设计一个时间复杂度为 O(n + m + indices.length) 且仅用 O(n + m) 额外空间的算法来解决此问题吗?
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/cells-with-odd-values-in-a-matrix 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。