【力扣 - 矩阵置零】

news/2024/5/13 21:18:43

题目描述

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

示例1

在这里插入图片描述

示例2

在这里插入图片描述

提示:

m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-2^31 <= matrix[i][j] <= 2^31 - 1

方法一:使用标记数组

思路和算法

我们可以用两个标记数组分别记录每一行和每一列是否有零出现。

具体地,我们首先遍历该数组一次,如果某个元素为 0,那么就将该元素所在的行和列所对应标记数组的位置置为 true。最后我们再次遍历该数组,用标记数组更新原数组即可。

代码

void setZeroes(int** matrix, int matrixSize, int* matrixColSize) {// Get the number of rows and columns in the matrixint m = matrixSize;int n = matrixColSize[0];// Initialize arrays to keep track of rows and columns that need to be zeroedint row[m], col[n];memset(row, 0, sizeof(row)); // Initialize row array with zerosmemset(col, 0, sizeof(col)); // Initialize col array with zeros// Iterate through the matrix to find elements that are zerofor (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (!matrix[i][j]) { // If the element is zerorow[i] = col[j] = true; // Mark the corresponding row and column}}}// Iterate through the matrix to update elements based on row and column markersfor (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (row[i] || col[j]) { // If the row or column needs to be zeroedmatrix[i][j] = 0; // Set the element to zero}}}
}

复杂度分析

时间复杂度:O(mn),其中 m 是矩阵的行数,n 是矩阵的列数。我们至多只需要遍历该矩阵两次。

空间复杂度:O(m+n),其中 m 是矩阵的行数,n 是矩阵的列数。我们需要分别记录每一行或每一列是否有零出现。

方法二:使用两个标记变量

思路和算法

我们可以用矩阵的第一行和第一列代替方法一中的两个标记数组,以达到 O(1) 的额外空间。但这样会导致原数组的第一行和第一列被修改,无法记录它们是否原本包含 0。因此我们需要额外使用两个标记变量分别记录第一行和第一列是否原本包含 0

在实际代码中,我们首先预处理出两个标记变量,接着使用其他行与列去处理第一行与第一列,然后反过来使用第一行与第一列去更新其他行与列,最后使用两个标记变量更新第一行与第一列即可。

代码

void setZeroes(int** matrix, int matrixSize, int* matrixColSize) {int m = matrixSize; // Number of rows in the matrixint n = matrixColSize[0]; // Number of columns in the matrix// Flags to track if the first column or row needs to be zeroedint flag_col0 = false, flag_row0 = false;// Check the first column for zerosfor (int i = 0; i < m; i++) {if (!matrix[i][0]) {flag_col0 = true;}}// Check the first row for zerosfor (int j = 0; j < n; j++) {if (!matrix[0][j]) {flag_row0 = true;}}// Mark rows and columns for zeroing based on zero elements in the matrixfor (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {if (!matrix[i][j]) {matrix[i][0] = matrix[0][j] = 0;}}}// Zero out elements based on marked rows and columnsfor (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {if (!matrix[i][0] || !matrix[0][j]) {matrix[i][j] = 0;}}}// Zero out the first column if flaggedif (flag_col0) {for (int i = 0; i < m; i++) {matrix[i][0] = 0;}}// Zero out the first row if flaggedif (flag_row0) {for (int j = 0; j < n; j++) {matrix[0][j] = 0;}}
}

复杂度分析

时间复杂度:O(mn),其中 m 是矩阵的行数,n 是矩阵的列数。我们至多只需要遍历该矩阵两次。

空间复杂度:O(1)。我们只需要常数空间存储若干变量。

作者:力扣官方题解
链接:https://leetcode.cn/problems/set-matrix-zeroes/solutions/669901/ju-zhen-zhi-ling-by-leetcode-solution-9ll7/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


http://www.mrgr.cn/p/41751037

相关文章

Django框架之Django的安装与使用

首先我们需要先确定好自己电脑上的python解释器环境,否则会导致后面项目所需要的库安装不了以及项目无法运行的问题。 一、Django框架下载 要下载Django并开始使用它,你可以按照以下步骤进行: 1、安装Python首先,确保你的计算机上已经安装了Python。你可以从 Python官方网站…

会出价,才是一个投手最大的底气

ECPM公式,最重要的一个因素,也是排在公式最前面的就是出价 先有合适的出价,才有后面点击率/转化率 从出价就能看出一个投手基础能力的强弱 如何理解出价背后的含义,不局限于一个简单的数字 关于出价深层的含义,今天来聊聊 1: 出的合适不 2: 时机对不对 3: 判断准不准 4: 系…

人工智能复试考察要点

什么是人工智能 人工智能是计算机科学的一个重要分支. 也是一门正在发展中的综合性前沿学科,它是由计算机科学、控制论、信息论、神经生理学、哲学、语言学等多种学科相互渗透而发展起来的,目前正处于发展阶段尚未形成完整 休系。 人工智能三大学派——符号、连接、行为 合取…

模板的局限性

大家好&#xff1a; 衷心希望各位点赞。 您的问题请留在评论区&#xff0c;我会及时回答。 模板的局限性 模板的通用性并不是万能的。函数模板传入数组或用户自定义的数据类型&#xff0c;就有可能发生错误。 例如&#xff1a; template<typename T> void f(T a, T b…

04基本数据类型

【一】数字类型(int/float) (1)作用整数类型用于表示整数,是一种基本的数字类型,广泛用于表示计数、索引等整数值。 浮点类型用于表示带有小数部分的数值,适用于需要更精确表示的情况。(2)定义 # 【1】整型 -- int number = 18# 查看内存地址 print(id(number)) # 14…

Camera sensor bringup

Camera Sensor Module配置信息: Camera Module Configuration 的信息包含在:<cameraModuleData> … </cameraModuleData>以vendor/qcom/proprietary/chi-cdk/oem/qcom/module/xxx_sunny_s5khm2_wide_module.xml 为例:各配置参数含义如下:参数名说明cameraIdsen…

【差分约束+并查集】第十三届蓝桥杯省赛C++ A组 Java A组/研究生组《推导部分和》(C++)

【题目描述】 【输入格式】 【输出格式】 【数据范围】 【输入样例】 5 3 3 1 5 15 4 5 9 2 3 5 1 5 1 3 1 2 【输出样例】 15 6 UNKNOWN 【思路】 题解来源&#xff1a;AcWing 4651. $\Huge\color{gold}{推导部分和}$ - AcWing 【代码】 #include<bits/stdc.h> #define…

python的一些知识点

在C C Java中&#xff0c;基本数据类型变量&#xff08;将常量数据存储在变量空间当中&#xff09; int a 3; int b 4; 在C C中&#xff0c;指针变量&#xff08;存储的是变量的物理内存地址&#xff09; int a 3; int* b; b &a; int** c; c &b; printf("%d&…

【Linux C | 多线程编程】线程的创建、线程ID、线程属性

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-03-22 0…

必备知识点 路由

django必备知识点 路由 1.Django生命周期请求流程图浏览器>> 发送请求(Http请求) >> web服务网关接口(django默认的wsgiref模块不能承受高并发,最大只有1000左右) >> 中间件 >> 缓存数据库(返回给中间件已经缓存过的数据) >> urls.py(路由层) &…

【C++初阶】之类和对象(下)

【C初阶】之类和对象&#xff08;下&#xff09; ✍ 再谈构造函数&#x1f3c4; 初始化列表的引入&#x1f498; 初始化列表的语法&#x1f498; 初始化列表初始化元素的顺序 &#x1f3c4; explicit关键字 ✍ Static成员&#x1f3c4; C语言中的静态变量&#x1f3c4; C中的静…

vscode添加gitee

1.创建仓库 2.Git 全局设置 3.初始化仓库 2.1 打开vscode打开需要上传到给git的代码文件 2.2.点击左边菜单第三个的源代码管理->初始化仓库 4.点击加号暂存所有更改 5.添加远程仓库 5.1 添加地址&#xff0c;回车 5.2 填写库名&#xff0c;回车 6.提交和推送 6.1 点击✔提交…

用搜索引擎收集信息-常用方式

1&#xff0c;site csdn.net &#xff08;下图表示只在csdn网站里搜索java&#xff09; 2&#xff0c;filetype:pdf &#xff08;表示只检索某pdf文件类型&#xff09; 表示在浏览器里面查找有关java的pdf文件 3&#xff0c;intitle:花花 &#xff08;表示搜索网页标题里面有花…

Vulnhub之dc-7

一信息收集 IP扫描端口扫描访问 80发现登录框上面提示说爆破可能不会成功,方法在外框所以可能在这里:谷歌搜索@DC7USER 发现Dc7User进入staffdb项目看看,在config.php发现账号密码发现有用户名和密码:username = "dc7user" password = "MdR3xOgB7#dW";…

[密码学] 密码学基础

目录 一 为什么要加密? 二 常见的密码算法 三 密钥 四 密码学常识 五 密码信息威胁 六 凯撒密码 一 为什么要加密? 在互联网的通信中&#xff0c;数据是通过很多计算机或者通信设备相互转发&#xff0c;才能够到达目的地,所以在这个转发的过程中&#xff0c;如果通信包…

Oracle查询数据库万能SQL

Oracle 数据库表简要说明数据库表 描述USER 开头的 只能查询自身用户的表DBA 开头的 最高权限,只能用sys、system用户才能查询CDB 开头的 Container Database 数据库容器ALL 开头的 sys、system、普通用户都能查查询数据库表 -- 查询数据库表字段:以下的表都可以作为主表查询…

134.加油站

// 定义一个名为Solution的类 class Solution {// 定义一个公开方法canCompleteCircuit&#xff0c;输入参数为两个整数数组gas和cost&#xff0c;分别代表加油站的汽油量和消耗油量public int canCompleteCircuit(int[] gas, int[] cost) {// 初始化当前剩余油量sum为0&#x…

开启污水处理新纪元:3D可视化技术引领行业变革

在科技日新月异的今天,环保事业也迎来了前所未有的发展机遇。污水处理作为环保领域的重要组成部分,其技术的革新与进步,对于保护水资源、维护生态平衡具有重要意义。在科技日新月异的今天,环保事业也迎来了前所未有的发展机遇。污水处理作为环保领域的重要组成部分,其技术…

PCL拟合并绘制平面(二)

使用RANSAC拟合点云平面 1、C实现2、效果图 普通的点云平面拟合方式在一般情况下可以得到较好的平面拟合效果&#xff0c;但是容易出现平面拟合错误或是拟合的平面不是最优的情况。此时就需要根据自己的实际使用情况&#xff0c;调整平面拟合的迭代次数以及收敛条件。 使用RAN…

软件杯 深度学习 机器视觉 人脸识别系统 - opencv python

文章目录 0 前言1 机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 2 深度学习-人脸识别过程人脸检测人脸识别Metric Larning 3 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 人脸识别系统 该项目…