您的位置:首页 > 教育 > 培训 > 河北省建设工程管理信息网官网_212200扬中热线论坛_站长之家音效_佛山百度快速排名优化

河北省建设工程管理信息网官网_212200扬中热线论坛_站长之家音效_佛山百度快速排名优化

2025/1/8 0:51:11 来源:https://blog.csdn.net/weixin_45857030/article/details/144945358  浏览:    关键词:河北省建设工程管理信息网官网_212200扬中热线论坛_站长之家音效_佛山百度快速排名优化
河北省建设工程管理信息网官网_212200扬中热线论坛_站长之家音效_佛山百度快速排名优化

前言

本专栏主要通过“LeetCode 热题100”,来捡起自己本科阶段的算法知识与技巧。语言主要使用c++/java。如果同样正在练习LeetCode 热题100的朋友欢迎关注或订阅本专栏。有疑问欢迎留言交流~

题目描述

题目链接
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
在这里插入图片描述

思路

最开始我不知道什么是“原地算法”。gpt给的答复是:原地算法(In-place algorithm)是指在执行算法时不需要额外的存储空间,或者只需要常数级别的额外存储空间的算法。换句话说,算法的输入数据被直接修改以产生输出结果,而不需要创建额外的数据结构来存储输出结果或中间结果。
如果只是不用额外的数组来存储二维数组,不难。只要发现一个0然后对当前的数组的行列赋值0就好,但需要注意不要把后面没有开始判断的数字给赋值0了。既然怕前面的赋值操作影响后面的数组,其实完全可以用数组记录下来哪些行和列要归0。然后最后统一来赋值0就好。

Java代码如下:

class Solution {public void setZeroes(int[][] matrix) {int m = matrix.length;int n = matrix[0].length;boolean[] row = new boolean[m];boolean[] col = new boolean[n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {//发现0if (matrix[i][j] == 0) {row[i] = col[j] = true;//只需要记录下来这些row 和 col为true}}}for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (row[i] == true || col[j] == true) {matrix[i][j] = 0;}}}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com