原地算法矩阵置0_原地排序算法有哪些

原地算法矩阵置0_原地排序算法有哪些给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。进阶:一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。你能想出一个仅使用常量空间的解决方案吗?示例 1:输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2:输入:matrix

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

进阶:

一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。
一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
你能想出一个仅使用常量空间的解决方案吗?

示例 1:

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
示例 2:


输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
 

提示:

m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-231 <= matrix[i][j] <= 231 – 1

题解

  1. 设一个数组row,col表示每一行和每一列是否应该被记为0.
    空间复杂度O(n + m)
class Solution { 
   
public:
    void setZeroes(vector<vector<int>>& matrix) { 
   
        int n = matrix.size(),m = matrix[0].size();
        vector<bool>row(n,false),col(m,false);
        for(int i = 0;i < n;i ++){ 
   
            for(int j = 0;j < m;j ++){ 
   
                if(matrix[i][j] == 0)row[i] = true,col[j] = true;
            }
        }
        for(int i = 0;i < n;i ++){ 
   
            if(row[i]){ 
   
                for(int j = 0;j < m;j ++)matrix[i][j] = 0;
            }
        }
        for(int j = 0;j < m;j ++){ 
   
            if(col[j]){ 
   
                for(int i = 0;i < n;i ++)matrix[i][j] = 0;
            }
        }
    }
};
  1. 将每一行和每一列是否置为0记录在matrix[0][j]和matrix[0][i]中,然后设置两个标记标注是否第一行和第一列是否为0
class Solution { 
   
public:
    void setZeroes(vector<vector<int>>& matrix) { 
   
        int n = matrix.size(),m = matrix[0].size();
        bool flag_r = false,flag_c = false;
        for(int i = 0;i < n;i ++){ 
   
            if(matrix[i][0] == 0)flag_c = true;
        }
        for(int i = 0;i < m;i ++){ 
   
            if(matrix[0][i] == 0)flag_r = true;
        }
        for(int i = 1;i < n;i ++){ 
   
            for(int j = 1;j < m;j ++)
                if(matrix[i][j] == 0)
                    matrix[0][j] = 0,matrix[i][0] = 0;
        }
        for(int i = 1;i < n;i ++){ 
   
            for(int j = 1;j < m;j ++){ 
   
                if(matrix[0][j] == 0 || matrix[i][0] == 0)matrix[i][j] = 0;
            }
        }
        if(flag_r)for(int i = 0;i < m;i ++)matrix[0][i] = 0;
        if(flag_c)for(int i = 0;i < n;i ++)matrix[i][0] = 0;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169158.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 设计模式: 迭代模式

    设计模式: 迭代模式

    2022年1月14日
    51
  • 虚拟机桥接模式怎么都连不上网(桥接模式下不能连校园网)[通俗易懂]

    虚拟机桥接模式怎么都连不上网(桥接模式下不能连校园网)[通俗易懂]虚拟机桥接失败的坑——桥接模式下不能连校园网问题描述这天下午,我在将树莓派采集到的图片拷贝到虚拟机Ubuntu上的时候,发现用NAT模式根本ping不通虚拟机。所以就想配个桥接模式嘛…然后就陷入了一个坑——折腾了四个多小时的坑。。。搞了半天,发现怎么桥接都连接不上网,ping都ping不通,网上也找了好多帖子,浏览量7、8W的帖子都翻烂了还是没用。嘤嘤嘤…网上有说安装包没卸载干净的、也有说要把桥接改成自动的,VMware卸了装,装了卸,然并卵。。。问题原因原因嘛,说出来都丢人,就是——桥接模式下

    2022年5月18日
    51
  • linux内核版本介绍_如何查看linux内核

    linux内核版本介绍_如何查看linux内核在下水平相当有限,不当之处,还望大家批评指正^_^1.标准内核版本信息看下图(截自https://www.kernel.org/)第一列,版本性质:主分支(mainline),稳定版(stable),长期维护版(longterm)第二列,版本号。-rc表示非正式发布版本,[EOL]表示本分支最后一个版本。第三列,版本发布日期。patch列是补丁。用于从本分支

    2022年8月23日
    5
  • Android手机端编程开发软件合集(一)

    Android手机端编程开发软件合集(一)在网上搜索了很久才找到的编程IDE高级解锁版,在这里记录并分享一下吧!一、合集地址:蓝奏云:https://huanxingke.lanzous.com/b0203kqjg密码:flyingdream二、软件合集截图如下:三、软件的一些介绍:★文件1:【QPython3H.apk】(1)Python编辑器。(2)优点:文件交互简单,界面简洁友好,支持androidhelper,可以很方便地调用Android的API。(3)缺点:支持的第三方库较少,无代码预测。(4)网上的介绍:

    2022年5月24日
    47
  • 算法-DFA算法-敏感词过滤算法(OC、Swift、Python)「建议收藏」

    前言前段时间,公司的IMSDK想做敏感词过滤,但是后端的小伙伴《比较忙》,在开产品需求会的时候想把敏感词过滤放到前端,让iOS、安卓自己搞,但是前端小伙伴写了一个方法来检测一段文本,耗时一两秒钟而且比较耗CPU,这样肯定不行的,最后后端小伙伴妥协了,把敏感词过滤放到后端了。一般的思路可能是遍历敏感词库,然后把一段文字的敏感词过滤掉,但是针对比较大的词库时(比如我们的敏感词库10万),这样非…

    2022年4月10日
    200
  • 开源 网管 工具_网管软件

    开源 网管 工具_网管软件Nagios:最大的亮点是轻量灵活,且报警机制很强,如果你只是需要监控服务器/服务是否在运行,Nagios以前只是从目标主机收集信息,,并且有很强大的发送报警信息的功能。适合监视大量服务器上面的大批服务是否正常,重点并不在图形化的监控,其集成的很多功能例如报警,都是cacti没有或者很弱的.cacti主要用途还是用来收集历史数据和画图,所以界面比nagios漂亮很多cact

    2022年9月26日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号