将二维矩阵0元素所在行列都标记为0
来源:互联网 发布:如何通过网络看电视 编辑:程序博客网 时间:2024/05/22 14:15
题目:将二维矩阵0元素所在行列都标记为0,要求空间复杂度为o(1)。 比如
1 2 3 4
5 6 0 8
9 1 3 5
0 5 7 4
两个0所在的行列分别是[1,2]和[3,0],即行1、3,列 0、2的所有元素都变成0。标记后变成:
0 2 0 4
0 0 0 0
0 1 0 5
0 0 0 0
从第0行开始遍历矩阵,遇到0,将0所在的行和列都标记成0,跳过这行,继续下一行。可是这样问题在于,在第二行的时候遇到0,这个0是原来就有的,还是第一步的时候被标记成的呢?
遇到0的时候,将这一行都标记成0是可以的,因为以后不会再回溯回去了。但是不能在此时将列也全部变成0,需要一个方法记住0所在的列,在遍历一次以后,处理完所有的行了,再遍历一次,将刚才记住的列都标记成0才算完事儿。
[方法一] 第一次遍历时,遇到0,将这个0变成1,这一行的其他元素都变成0,这样就把这个0的位置记下来了。第二次遍历(从第0列开始遍历),遇到1的时候,要看这个1个左边或者右边,是不是0,如果不是0的话,那这个1就是初始的数;如果是0的话,说明这个1是刚才标记的,这时可以将1所在的列都标记成0。这种方法的时间复杂度是o(mn)--还是o(mnn)?
[方法二] 不能额外分配空间来记住0所在的列,可以用这个矩阵本身来记啊。第一次遍历,遇到第一个0,将这行作为标记行,0变成1,这行其他元素都变成0;继续遍历,遇到0,将该行都变成0,对应标记行的那个元素变成1。这样第一次遍历完成后,标记行就记下了哪些列应该变成0。第二次遍历只需遍历这个标记行,将1所在的列都变成0即可收工。时间复杂度是o(mn)。
- 将二维矩阵0元素所在行列都标记为0
- 有 M X N的矩阵,若行某行某列为0,则置0元素所在行列所有元素为0?
- 将矩阵中0元素所对应的行列都清零
- 把矩阵0元所在行列设置为0
- 将矩阵中元素0所在的行和列置为0
- 《CTCI》1.7 二维数组的含0元素所在行列清零
- 将M*N矩阵中0元素所在的行、列的元素全部置为0
- Set Matrix Zeroes 将矩阵行列置为0
- 【Java】若MxN矩阵中某个元素为0, 则将其所在的行与列清零
- 清除行列 请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。 给定一个N阶方阵int[][](C++中为vector<vector><int>>)mat和矩阵的阶数n,请返回完成操
- 面试题91:清除矩阵0所在行列
- 将矩阵中值为0的元素所在的行和列设置为0, in-place O(1)space O(mn) time
- 《程序员面试金典》--清除二维数组中元素为0所在的行和列
- 【前端面试】清除二维数组中元素为0所在的行和列
- 数组中0所在行列设置为0
- 经典算法面试题目-置矩阵行列元素为0(1.7)
- 9.1数组与字符串(六)——若M*N矩阵中某个元素为0,则将其所在的行与列清零
- 程序员面试金典1.7:若M*N矩阵中某个元素为0,则将其所在的行与列清零
- linux内核编译过程中出现两个错误的解决方法~!
- TFS文件系统数据服务器启动加载分析
- 贝子你能回来吗?
- the connection to the VMware USB Arbitration Service was unsuccessful.Please check the status of this service in the Microsogt M
- TFS文件系统写文件分析
- 将二维矩阵0元素所在行列都标记为0
- 自由软件之父
- magento -- 推荐插件 -- 按字母过滤列表页产品 --alphabates
- 持续进步
- PDM 四阶段成熟度模型
- PDM 四阶段成熟度模型
- PDM 四阶段成熟度模型
- PDM 四阶段成熟度模型
- 在虚拟机上运行vxWorks