1. 具体题目

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法

示例 1:

输入:       输出:
[        [
  [1,1,1],       [1,0,1],
  [1,0,1],      [0,0,0],
  [1,1,1]       [1,0,1]
]        ]

2. 思路分析

先遍历原矩阵,找出所有值为 0 的元素,记录其行列的值,分别存入对应的 HashSet 中,之后遍历两个HashSet,将记录下来的行和列分别置零。

3. 代码

 public void setZeroes(int[][] matrix) {
HashSet<Integer> rows = new HashSet<>();
HashSet<Integer> cols = new HashSet<>();
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < matrix[0].length; j++){
if(matrix[i][j] == 0){
rows.add(i);
cols.add(j);
}
}
}
for(int row : rows){
for(int col = 0; col < matrix[0].length; col++){
matrix[row][col] = 0;
}
}
for(int col : cols){
for(int row = 0; row < matrix.length; row++){
matrix[row][col] = 0;
}
}
}

4. 思路优化

上述题解中,使用了额外的空间O(n + m),对于空间进行优化,可以在遍历数组找 0 元素时,若找到则将其所在的行首和列首分别置0,之后再通过标志位进行置零操作。

最新文章

  1. O365(世纪互联)SharePoint 之使用Designer报错
  2. ajax的循环
  3. Nginx 和 IIS 实现动静分离
  4. Unity3D 摄像机的Transform通过摇杆输出的方向
  5. c++并发练习---多线程顺序打印
  6. Pro ASP.NET MVC –第五章 使用Razor
  7. SuperSocket 1.6.4 通过FixedHeaderReceiveFilter解析自定义协议
  8. android 制作自定义标题栏
  9. c#操作Excel时,抛出异常:“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”
  10. oracle小测试
  11. 【转】 简单理解Socket
  12. linux命令:rmdir
  13. Spring DI模式 小样例
  14. COM口,串行通讯端口,RS-232接口 基础知识
  15. [置顶] (游戏编程-04)JAVA版雷电(奇迹冬瓜)
  16. bzoj 5287: [Hnoi2018]毒瘤
  17. bugku web 管理员系统
  18. wordcloud2.js
  19. 学习笔记day1-计算机介绍
  20. 话谈C#第一天

热门文章

  1. Npm使用遇到的问题解决
  2. 分布式服务防雪崩熔断器,Hystrix理论+实战。
  3. exsi 回收虚拟机磁盘
  4. hdu3438 Buy and Resell(优先队列+贪心)
  5. docker--数据持久化之Data Volume
  6. Java面试宝典(7)混合2
  7. C# 编程--数组
  8. 十六、ajax上传图片 mvc
  9. Retrofit总结(原)
  10. 力扣 ——Linked List Cycle II(环形链表 II) python实现