LeetCode 73. 矩阵置零

news2024/11/30 20:48:22

LeetCode 73. 矩阵置零

难度: m i d d l e \color{orange}{middle} middle


题目描述

给定一个 KaTeX parse error: Double subscript at position 3: _m_̲ x _n_ 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法

示例 1:

在这里插入图片描述

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

示例 2:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FZihipLq-1677032011375)(null)]

输入: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 = = m a t r i x . l e n g t h m == matrix.length m==matrix.length
  • n = = m a t r i x [ 0 ] . l e n g t h n == matrix[0].length n==matrix[0].length
  • 1 < = m , n < = 200 1 <= m, n <= 200 1<=m,n<=200
  • − 2 31 < = m a t r i x [ i ] [ j ] < = 2 31 − 1 -2^{31} <= matrix[i][j] <= 2^{31} - 1 231<=matrix[i][j]<=2311

进阶:

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

算法

(原地算法) O ( n m ) O(nm) O(nm)

我们只需统计出矩阵中每一行或者每一列是否有0,然后把含有0的行或者列都置成0即可。

  • 用两个变量记录第一行和第一列是否有0。
  • 遍历整个矩阵,用矩阵的第一行和第一列记录对应的行和列是否有0。
  • 把含有0的行和列都置成0。

复杂度分析

  • 时间复杂度:矩阵中每个元素只遍历常数次数,所以时间复杂度是 O ( n m ) O(nm) O(nm)

  • 空间复杂度 : 只用了两个额外的变量记录第一行和第一列是否含有0,所以额外的空间复杂度是 O ( 1 ) O(1) O(1)

C++ 代码

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        if (matrix.empty()) return;
        int n = matrix.size(), m = matrix[0].size();

        int r0 = 1, c0 = 1;
        //判断第0for (int i = 0; i < m; i ++) if (matrix[0][i] == 0) r0 = 0;
        //判断第0for (int i = 0; i < n; i ++) if (matrix[i][0] == 0) c0 = 0;

        //判断第1行到第n - 1行是否有0,存储在第一列中
        for (int i = 1; i < n; i ++) {
            for (int j = 0; j < m; j ++) {
                if (matrix[i][j] == 0) matrix[i][0] = 0;
            }
        }

        //判断第1列到第 n - 1列是否有0,存储在第一行中
        for (int i = 1; i < m; i ++) {
            for (int j = 0; j < n; j ++) {
                if (matrix[j][i] == 0) matrix[0][i] = 0;
            }
        }

        // 修改行的数值
        for (int i = 1; i < n; i ++ ) {
            if (matrix[i][0] == 0) 
                for (int j = 0; j < m; j ++) 
                    matrix[i][j] = 0;
        }

        //修改列的数值
        for (int i = 1; i < m; i ++) {
            if (matrix[0][i] == 0) 
                for (int j = 0; j < n; j ++)
                    matrix[j][i] = 0;
        }

        //修改第一行
        if (r0 == 0) for (int i = 0; i < m; i ++) matrix[0][i] = 0;
        //修改第一列
        if (c0 == 0) for (int i = 0; i < n; i ++) matrix[i][0] = 0;
        
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/363447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Power Query 再谈日期表

Power Query 再谈日期表 需要附件的朋友可以点赞关注后&#xff0c;在公众号(焦棚子)后台回复 日期表 三个字即可领取。 一、背景 在 Power BI 或者 Power Pivot 做业务分析中&#xff0c;必不可少的就是日期表。我们继续优化调制出符合国人习惯日期表。 本次更新&#xff…

harbor 仓库迁移升级

harbor 仓库迁移升级 harbor仓库安装数据传输仓库切换版本 v1.8.0 v2.3.5 harbor仓库安装 环境准备&#xff1a;安装docker详见&#xff1a;docker 的介绍和部署&#xff0c;并下载docker-compose详见&#xff1a;docker 三剑客compose。 现有支持的安装harbor仓库的方式有两…

犹太教、基督教、伊斯兰教的区别与联系

一、犹太教、基督教、伊斯兰教的简明关系图二、犹太教、基督教、伊斯兰教的主要区别注&#xff1a;弥赛亚&#xff08;希伯莱语&#xff09;就是基督&#xff08;希腊语&#xff09;&#xff0c;意思是“救世主”。注&#xff1a;伊斯兰教的观点是&#xff1a;穆罕默德不是伊斯…

华为OD机试 - 优雅数组(Python)【2023-Q1 新题】

华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 优雅数组 | 华为…

S5P6818_系统篇(2)源码编译及烧录

源码获取 源码获取和操作流程 1.下载liunux下的系统制作脚本&#xff0c;可以烧录系统和构建镜像 git clone https://github.com/friendlyarm/sd-fuse_s5p6818.git 如果出现git错误可使用如下方法&#xff1a; git config --global http.sslverify false 2.阅读该工具rea…

Linux文件系统操作与磁盘管理

查看磁盘和目录的容量 使用 df 命令查看磁盘的容量 df在实验楼的环境中你将看到如下的输出内容&#xff1a; 但在实际的物理主机上会更像这样&#xff1a; 物理主机上的 /dev/sda2 是对应着主机硬盘的分区&#xff0c;后面的数字表示分区号&#xff0c;数字前面的字母 a 表示…

Magisk Yyds.Msu定制方案 原理 ROOT隐藏 风控绕过

介绍 与市面上所有方案都不一样&#xff0c;基于最新Magisk代码分支&#xff0c;通过修改Magisk的挂载方式&#xff0c;解决了root隐藏的问题&#xff0c;可绕过如momo独立进程&#xff0c;挂载检测等各种风控&#xff0c;并因为个人项目原因&#xff0c;默认把Zygisk禁用&…

【手把手一起学习】(二) Altium Designer 20 工程创建

1 Altium Designer 20 工程创建 手把手一起学习&#xff0c;从零开始制作一款属于自己的STM32核心板&#xff0c;规范AD使用&#xff0c;养成良好习惯 1.1 新建工程 首先&#xff0c;创建工程&#xff0c;操作如图所示&#xff1a; 选择默认工程&#xff0c;输入工程名字和路…

吊炸天的1500亿,到底有多魔性

超1500亿的数据安全规模 数据安全是近几年来最热门的行业话题&#xff0c;数字化转型使得数据作为新型生产要素的重要性日益凸显&#xff0c;数据经济已成为经济发展的核心驱动力&#xff0c;数字经济的蓬勃催生了巨大的数据安全需求。 临近春节前夕&#xff0c;在工信部、国…

Java API 文档搜索引擎

1. 认识搜索引擎:在搜狗搜索的搜索结果页中, 包含了若干条结果, 每一个结果包含了图标, 标题, 描述, 展示URL等搜索引擎的本质:输入一个查询词, 得到若干个搜索结果, 每个搜索结果包含了标题, 描述, 展示URL和点击URL2. 搜索引擎思路:2.1 搜索的核心思路:当前我们有很多的网页(…

日志收集笔记(架构设计、Log4j2项目初始化、Lombok)

1 架构设计 ELK 技术栈架构设计图&#xff1a; 从左往右看&#xff0c; Beats&#xff1a;主要是使用 Filebeat&#xff0c;用于收集日志&#xff0c;将收集后的日志数据发送给 Kafka&#xff0c;充当 Kafka 的生产者Kafka&#xff1a;高性能消息队列&#xff0c;主要起缓冲…

GitHub标星30K+的Java面试八股文长啥样?

2023年的互联网行业竞争越来越严峻&#xff0c;面试也是越来越难&#xff0c;一直以来我都想整理一套完美的面试宝典&#xff0c;奈何难抽出时间&#xff0c;这套1000道的Java面试手册我整理了整整1个月&#xff0c;上传到Git上目前star数达到了30K 一、32 道 MySQL 面试题 1&…

论文阅读:RA-Depth: Resolution Adaptive Self-Supervised Monocular Depth Estimation

中文标题&#xff1a; 分辨自适应自监督单目深度估计 提出问题 传统的无监督深度估计方法如果在固定分辨率上训练&#xff0c;则迁移到其他分辨率上存在严重退化。 创新点 提出一种分辨率自适应的无监督深度学习框架(RA-Depth&#xff09;来学习场景深度尺度不变性。具体地…

postman入门到精通之【接口知识准备】(一)

postman入门到精通之【接口知识准备】&#xff08;一&#xff09; 目录&#xff1a;导读 前言 接口测试概念 接口测试 接口测试的原理 常用接口测试工具 接口测试基础知识 接口的定义 接口的分类 HTTP接口 Web Service接口 RESTful接口 HTTP请求 统一资源定位符&…

使用终端工具给你的电脑发送弹窗提醒

大家好&#xff0c;我是良许。 现在人手一部智能手机&#xff0c;这些智能手机都有个非常实用的功能&#xff0c;那就是弹窗提醒。当我们收到短信&#xff0c;或者微信信息时&#xff0c;手机就会弹窗显示信息的大致内容。有了这个功能你就不会错过重要信息了。 电脑上也有类…

Android 流量统计

Android 流量统计最近项目上有一个应用流量统计的功能需要实现&#xff0c;在此总结一下 流量统计架构 在Android9.0之前&#xff0c;流量监控是基于xt_qtaguid模块的&#xff0c;通过读取/proc/net/xt_qtaguid/stats文件内容进行解析获取对应流量数据。 Android9.0之后&…

51单片机学习笔记_12 LCD1602 原理及其模块化代码

LCD1602 liquid crystal display 液晶显示屏&#xff0c;一种字符型液晶显示模块&#xff0c;可以显示 16*2 个字符&#xff0c;每个字符是 5*7 点阵。 P0 P2 会和数码管、LED 一定程度上冲突。 地。 Vcc。 调对比度的。 RS&#xff1a;数据指令端。1代表 DB 是数据&#x…

想要去字节跳动面试Android岗,给你这些面试知识点

关于面试字节跳动&#xff0c;我总结一些面试点&#xff0c;希望可以帮到更多的小伙伴&#xff0c;由于篇幅问题这里没有把全部的面试知识点问题都放上来&#xff01;&#xff01;目录&#xff1a;1.网络2.Java 基础&容器&同步&设计模式3.Java 虚拟机&内存结构…

实操go开发环境的配置

1、Go 安装包下载&#xff0c;下载地址如下&#xff1a; go语言中文网下载&#xff08;本人电脑的系统是Windows&#xff0c;这里以Windows版本的安装包为例&#xff0c;安装就是傻瓜式安装&#xff0c;只要点下一步–下一步–完成就可以了&#xff0c;本人安装在C盘下。 我…

AQS学习:ReentrantLock源码解析

前言 多线程知识中理解了ReentrantLock之后&#xff0c;对于整个AQS也会有大概的理解&#xff0c;后面再去看其它锁的源码就会比较容易。下面带大家一块来学习ReentrantLock源码。 概述 ReentrantLock是可重入的互斥锁&#xff0c;虽然具有与synchronized相同功能&#xff0…