c – 在矩阵中将0放在包含0的单元格的行和列中,而不使用额外的空格

给定一个矩阵,如果一个单元格包含0,那么我们将整个行和列对应于该单元格为0.例如,如果
1 2 3
M  =  0 4 5
      4 2 0

那么输出应该是

0 2 0
      0 0 0
      0 0 0

我认为的方法如下

>创建辅助数组row []和col [].如果单元格(i,j)包含0,则将row [i]和col [j]标记为0.(最初row []和col []包含全1).
>再次遍历整个矩阵,如果对于单元格(i,j),行[i]或col [j]中的任何一个为0,则将单元格(i,j)设置为0.

这需要O(m * n)时间和O(m n)空间.

如何在空间方面进一步优化它.欢迎任何提高时间复杂度的建议.

解决方法

啊哈,这是一个老问题.

>如果第一行没有元素,则使用一个布尔变量(isZeroInFirstRow)保存,如果第一列没有元素,则保存一个布尔变量(isZeroInFirstCol).>然后,遍历整个矩阵.如果cell(i,j)== 0,则将cell(0,j)和cell(i,0)设置为0.>遍历矩阵的第一行.如果cell(0,则将列(j)中的所有元素设置为0.>遍历矩阵的第一列.如果cell(i,0)== 0,则将row(i)中的所有元素设置为0.>如果isZeroInFirstRow == true,则将row(0)中的所有元素设置为0.>如果isZeroInFirstCol == true,则将列(0)中的所有元素设置为0.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...