摘要:题目要求当遇到数组中的值时,即将该值所在的行和列全部改为。新建两个数组分别代表该行和该列是否需要清零。然后根据这两个数组的情况对原数组进行赋值。虽然这意味着牺牲了一点时间性能,但是如果数据量非常庞大的话是非常好的一种实现。
题目要求
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. Follow up: Did you use extra space? A straight forward solution using O(mn) space is probably a bad idea. A simple improvement uses O(m + n) space, but still not the best solution. Could you devise a constant space solution?
当遇到数组中的值时,即将该值所在的行和列全部改为0。
思路一:O(m+n)这里题目中给出了三种空间复杂度。
第一种是O(mn),也就是新建一个boolean[m][n]的二维数组,如果该行列上值为0,则将其对应位置上的值也设置为0.最后再遍历boolean[][],将true所在的行列设置为0。但是这种方法不仅boolean[][]中很多值用不到,还会导致重复的0赋值行为,效率很低。
这里给出O(m+n)空间复杂度的方法。新建两个boolean[]数组分别代表该行和该列是否需要清零。然后根据这两个数组的情况对原数组进行赋值。代码如下:
public void setZeroes(int[][] matrix) { int rowCount = matrix.length; if(matrix.length==0){ return; } int columnCount = matrix[0].length; boolean[] rowIsZero = new boolean[rowCount]; boolean[] columnIsZero = new boolean[columnCount]; for(int i = 0 ; i思路二:O(1)空间复杂度 其实我们可以发现,如果我们将原数组中其中的一行和一列利用了来存储当前行和列的清零情况,还可以节约更多的时间和空间。虽然这意味着牺牲了一点时间性能,但是如果数据量非常庞大的话是非常好的一种实现。代码如下:
public void setZeroes2(int[][] matrix) { if(matrix==null){ return; } int m = matrix.length; int n = matrix[0].length; boolean rowHasZero = false; boolean colHasZero = false; for(int i=0; i
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/67358.html
摘要:这个方法的缺点在于,如果我们直接将存入首行或首列来表示相应行和列要置的话,我们很难判断首行或者首列自己是不是该置。 Set Matrix Zeroes Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. click to show follow up...
摘要:把矩阵所有零点的行和列都置零,要求不要额外的空间。对于首行和首列的零点,进行额外的标记即可。这道题我自己做了四遍,下面几个问题需要格外注意标记首行和首列时,从到遍历时,若有零点,则首列标记为从到遍历,若有零点,则首行标记为。 Problem Given a m x n matrix, if an element is 0, set its entire row and column t...
摘要:每天会折腾一道及以上题目,并将其解题思路记录成文章,发布到和微信公众号上。三汇总返回目录在月日月日这半个月中,做了汇总了数组知识点。或者拉到本文最下面,添加的微信等会根据题解以及留言内容,进行补充,并添加上提供题解的小伙伴的昵称和地址。 LeetCode 汇总 - 2019/08/15 Create by jsliang on 2019-08-12 19:39:34 Recently...
摘要:前言从开始写相关的博客到现在也蛮多篇了。而且当时也没有按顺序写现在翻起来觉得蛮乱的。可能大家看着也非常不方便。所以在这里做个索引嘻嘻。顺序整理更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新 前言 从开始写leetcode相关的博客到现在也蛮多篇了。而且当时也没有按顺序写~现在翻起来觉得蛮乱的。可能大家看着也非常不方便。所以在这里做个索引嘻嘻。 顺序整理 1~50 1...
摘要:题目链接题目分析给定一个整数数组,将值为的元素移动到数组末尾,而不改动其他元素出现的顺序。再在去后的元素末尾填充到计算出的数组长度。最终代码若觉得本文章对你有用,欢迎用爱发电资助。 D68 283. Move Zeroes 题目链接 283. Move Zeroes 题目分析 给定一个整数数组,将值为0的元素移动到数组末尾,而不改动其他元素出现的顺序。 思路 计算总共有多少个元素。 再...
阅读 2640·2021-11-24 10:44
阅读 1855·2021-11-22 13:53
阅读 1887·2021-09-30 09:47
阅读 3686·2021-09-22 16:00
阅读 2415·2021-09-08 09:36
阅读 2300·2019-08-30 15:53
阅读 2776·2019-08-30 15:48
阅读 952·2019-08-30 15:44