【LeetCode】奇数值单元格的数目 Java 题解
题目描述
给你一个 m x n 的矩阵,最开始的时候,每个单元格中的值都是 0。
另有一个二维索引数组 indices,indices[i] = [ri, ci] 指向矩阵中的某个位置,其中 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。
对 indices[i] 所指向的每个位置,应同时执行下述增量操作:
ri 行上的所有单元格,加 1 。ci 列上的所有单元格,加 1 。给你 m、n 和 indices 。请你在执行完所有 indices 指定的增量操作后,返回矩阵中 奇数值单元格 的数目。
复制代码
思路分析
今天的算法题目是数组题目,我们需要操作的是二维数组。初始化条件,每一个元素的值都是 0。题目规定了算法,二维索引数组 indices,ri 行上的所有单元格,加 1 。ci 列上的所有单元格,加 1 。
题目比较容易理解,我们首先可以使用朴素解法,对 indices 每一条数据进行模拟修改,得到修改完成的二维数组,然后判断每一个数值的奇偶性,返回答案。
朴素解法时间复杂度比较高,由于题目只需要判断数组元素的奇偶性,次操作只会将一行和一列的数增加 1,因此我们可以使用一个行数组 rows 和列数组 cols 分别记录每一行和每一列被增加的次数,不需要真实修改元素。最后在计算每一个二维数组元素修改的次数,判断奇偶性即可。具体实现代码如下,请参考。
通过代码
复制代码
总结
上述算法的时间复杂度是 O(m * n), 空间复杂度是 O(1)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/6ede52f838a0ce24203b94fa3】。文章转载请联系作者。
评论