新博文地址:[leetcode]Set Matrix Zeroes
新博文中,用了四种算法,时间复杂度都是O(m*n),空间复杂度分别为O(m*n),O(m+n)、O(n)、O(1),FYI
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.
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?
click to show follow up.
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?
这道题很有意思,提示中说一个改进是O(m+n),但是我没想到怎么做的,我的算法的空间复杂度为O(n)
算法思想是:
首先遍历整个matrix,遇到该行有0,则做3件事情:
1. 标记该行有0
2. 记录列号
3. 将该行扫描完之后,将该行所有元素置为0
然后将该数组全部扫描完之后,行已经设置完了,包含0的列号也已经收集完毕了。再根据这个这些列号重新更新数组。
public void setZeroes(int[][] matrix) { int m = matrix.length; int n = matrix[0].length; Set<Integer> columnSet = new HashSet<Integer>(); int i = 0,j = 0; for(; i < m; i++){ boolean hasZero = false; for(j = 0; j < n; j++){ if(matrix[i][j] == 0){ columnSet.add(j); hasZero = true; } } if(hasZero){ for(int k = 0 ; k < n; k++){ matrix[i][k] = 0; } } } for(int column : columnSet){ for(int k = 0 ; k < m; k++){ matrix[k][column] = 0; } } }
还有一种优化策略,不需要额外空间。
将columnSet记录在第一行中,如果第一行不包含0,那么跟上面的做法一样。如果第一行包含0,则先不对第一行进行更新处理,留在最后做。
大家感兴趣的可以自己动手做一下;再想一下,如果将columnSet记录在最后一行中是否可行?
相关推荐
java java_leetcode-73-set-matrix-zeroes
python python_leetcode题解之073_Set_Matrix_Zeroes
c c语言_leetcode题解之0073_set_matrix_zeroes.zip
javascript js_leetcode题解之73-set-matrix-zeroes.js
c++ C++_leetcode题解之766. Toeplitz Matrix.cpp
vs code LeetCode 插件
Set Matrix Zeroes 第一种 通过一次遍历记录所有为0的索引(Python中enumerate()输出当前列表的索引) 再遍历一次, 根据记录的索引进行置0 第二种 通过一次遍历所有为0的索引, 设置当前索引的行列的第一个数为0, 作为...
* Set Matrix Zeroes:该题目要求将矩阵中的零元素所在的行和列置零,实现方法使用了迭代算法。 * Search Insert Position:该题目要求在排序数组中查找元素,实现方法使用了二分查找算法。 * Longest Palindromic ...
《Python版LeetCode题解全集详解》 LeetCode是一个广受欢迎的在线编程挑战平台,致力于帮助程序员提升技能,特别是面试准备。这个压缩包“lc-all-solutions-master”包含了使用Python语言解决LeetCode所有问题的...
《使用leetcode-editor在IDE中进行LeetCode练习的全方位指南》 LeetCode是一个广受欢迎的在线编程练习平台,它提供了一系列的算法题目供程序员们提升技能。对于习惯在集成开发环境(IDE)中工作的开发者来说,将...
"IDEA leetcode-editor插件"就是将这两者结合的工具,允许用户在IDEA中直接进行LeetCode的编程挑战,无需离开开发环境,提高了刷题的便捷性。 该插件的主要功能包括: 1. **离线模式**:在无法访问LeetCode官网的...
(C++)LeetCode刷题题解答案
terminal-leetcode, 终端Leetcode是基于终端的Leetcode网站查看器 终端 leetcode终端leetcode是基于终端的leetcode网站查看器。本项目是由 RTV 激发的。 我最近正在学习本地化的反应,以实践我的新知识,并根据这个...
leetcode刷题, 直接用leetcode的分类方式.
5. **新标准库容器增强**:如`std::unordered_map`和`std::unordered_set`,提供更高效的数据结构,对于查找和插入操作特别有用。 二、dev_leetcode_c++11组件介绍 "dev_leetcode_c++11"是一个专门为LeetCode本地...
### LeetCode中文版知识点概述 #### 一、LeetCode简介与使用 LeetCode是一个全球知名的在线编程学习平台,主要提供各种算法题目供开发者练习。它不仅涵盖了基础数据结构和算法训练,还包括了大量的面试真题,是...
LeetCode面试笔试题
基于Python实现的LeetCode爬虫爬取LeetCode题目描述和提交的代码.zip ## 特点 - 支持爬取题目列表,保存为本地CSV/Excel文件。 - 支持爬取题目描述,保存为本地HTML文件。 - 支持爬取用户提交的代码,保存为如_.py...
LeetCode-Swift, 快速LeetCode解决方案 LeetCodeLeetCode在线判断是一个包含很多收费算法的网站。 them Google Google Google Google LinkedIn this this repo 。 请免费参考并收费STAR以支持这个 repo,
leetcode 习题集, leetcode 官网出品,包含基本的算法