分析一道水题,我也就刷刷这种题了。。。
将矩阵0元所在行列清0
第一眼,还在想能否边遍历,边清0,这种算法少一遍遍历,但是时间复杂度是不减的,虽然我感觉效率高了,但是常数因子对于OJ是被忽视的。不过这种想法也没弄出来。
关键是空间复杂度,初看一个我想到了设置一个特殊值,最后遍历再找特殊值,这样就不用申请空间了:)但是你找不到这样一个整数,他在测试数据不可能出现的。。。于是乎还是怪怪的设置flag matrix吧。。。bool最节约空间,有0的尾true,最后遍历找true就可以了。就这么过了。
另外遇到一个奇怪的memset问题,后面细谈。
看到提示O(m+n)空间复杂度,联想到爬楼梯那题,好像有几种技巧节约空间,于是朝着这方面想,不过最后结果与这个无关= = 其实就是最后记录所有需要清0的行号,列好,用个O(m+n)数组记录下来,最后再处理一遍就可以了。
最后还有O(1)的空间复杂度,我暂时还没想到。先搁置
有个问题不能搁置,我用memset清bool 数组的时候,居然总是bug,不知道啥问题,难度堆空间不能memset? 因为长度可变,所以堆,虽然gcc是支持申请可变数组,但是二维的必须也制定后一维长度,所以还是要new,如果没弄错的话= =
和机油伟哥讨论,他说可以堆空间调用构造函数初始化,但是编译没过,不知道啥问题= =
代码如下,不知道啥解释。。。