当前位置: 首页 > news >正文

LeetCode--HOT100题(18)

目录

  • 题目描述:73. 矩阵置零(中等)
    • 题目接口
    • 解题思路1
    • 代码
    • 解题思路2
    • 代码
  • PS:

题目描述:73. 矩阵置零(中等)

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

LeetCode做题链接:LeetCode-矩阵置零

示例 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

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

题目接口

class Solution {public void setZeroes(int[][] matrix) {}
}

解题思路1

方法一:使用标记数组
我们可以用两个布尔类型的标记数组(一个记录整行,一个记录整列)分别记录每一行和每一列是否有零出现,有的话将整行和整列置为true,然后再遍历一次数组将所有true的值对应的下标的数组换成0

代码

class Solution {public void setZeroes(int[][] matrix) {int colLen = matrix.length;int rowLen = matrix[0].length;boolean[] col = new boolean[colLen];boolean[] row = new boolean[rowLen];// 标记for (int i = 0; i < colLen; i++) {for (int j = 0; j < rowLen; j++) {if (matrix[i][j] == 0) {col[i] = true;row[j] = true;}}}// 遍历数组,将col,row为true的地方设为0for (int i = 0; i < colLen; i++) {for (int j = 0; j < rowLen; j++) {if (col[i] || row[j]) {matrix[i][j] = 0;}}}}
}

成功!
在这里插入图片描述
复杂度分析
时间复杂度:O(mn),其中 m 是矩阵的行数,n 是矩阵的列数。我们至多只需要遍历该矩阵两次。
空间复杂度:O(m+n),其中 m 是矩阵的行数,n 是矩阵的列数。我们需要分别记录每一行或每一列是否有零出现。

解题思路2

代码

class Solution {public void setZeroes(int[][] matrix) {int colLen = matrix.length;int rowLen = matrix[0].length;boolean flagRow = false;    // 行boolean flagCol = false;    // 列if (matrix[0][0] == 0) {// 如果第一个元素就是0,那 flagRow、flagCol直接置为true,不去遍历flagRow = flagCol = true;} else {for (int i = 0; i < rowLen; i++) {if (matrix[0][i] == 0) {flagRow = true; // 说明第一行有0,就直接为标true,然后退出break;}}for (int i = 0; i < colLen; i++) {if (matrix[i][0] == 0) {flagCol = true; // 说明第一列有0,就直接为标true,然后退出break;}}}// 开始标记,跟方法一类似,注意从1开始for (int i = 1; i < colLen; i++) {for (int j = 1; j < rowLen; j++) {if (matrix[i][j] == 0) {matrix[i][0] = 0;matrix[0][j] = 0;}}}// 遍历数组,将matrix[i][0] = 0 matrix[0][i] = 0 的行和列设为0,注意从1开始for (int i = 1; i < colLen; i++) {for (int j = 1; j < rowLen; j++) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}// 更新第一行与第一列if (flagRow) {for (int i = 0; i < rowLen; i++) {matrix[0][i] = 0;}}if (flagCol) {for (int i = 0; i < colLen; i++) {matrix[i][0] = 0;}}}
}

成功!
在这里插入图片描述

PS:

感谢您的阅读!如果您觉得本篇文章对您有所帮助,请给予博主一个喔~

相关文章:

LeetCode--HOT100题(18)

目录 题目描述&#xff1a;73. 矩阵置零&#xff08;中等&#xff09;题目接口解题思路1代码解题思路2代码 PS: 题目描述&#xff1a;73. 矩阵置零&#xff08;中等&#xff09; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都…...

ES6的语法兼容IE浏览器

案例1 zdsxData.zdsxData.forEach(el>{let str <tr> <td><a href${el.url} target"_blank"><font color"#79EEFF">${el.sxms}</font></a></td> <td>${el.gjjd}</td> <td>${el.zrr}<…...

【opencv学习】鼠标回调函数、鼠标控制画矩形

#include <iostream> #include <opencv2/opencv.hpp> using namespace cv; #define WinDow "程序窗口"void MouseHandle(int event, int x, int y, int flags, void* param);//鼠标回调函数 void Drawrectangle(cv::Mat& img, cv::Rect box);//矩形绘…...

Typescript面试题

文章目录 了解过TS吗&#xff1f;使用ts写一个对象属性约束说一下typescript中的泛型如何在TS中对函数的返回值进行类型约束ts和js相比有什么区别 了解过TS吗&#xff1f; ts是一种基于静态类型检查的强类型语言 let num:number20 console.log(num) console.log("str&qu…...

GB28181智能安全帽方案探究及技术实现

什么是智能安全帽&#xff1f;​ 智能安全帽是一种集成先进科技的安全帽&#xff0c;可基于GB28181规范&#xff0c;适用于铁路巡检、电力、石油化工等高风险行业的作业人员&#xff0c;以及消防、救援等紧急情况下的安全防护。 智能安全帽通常具有以下功能&#xff1a; 实时…...

【css】解决元素浮动溢出问题

如果一个元素比包含它的元素高&#xff0c;并且它是浮动的&#xff0c;它将“溢出”到其容器之外&#xff1a;然后可以向包含元素添加 overflow: auto;&#xff0c;来解决此问题&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html> <head> <style>…...

SOC FPGA之流水灯设计

一、DS-5简介 Altera Soc EDS开发套件的核心是Altera版ARM Development Studio 5(DS-5)工具包&#xff0c;为SoC器件提供了完整的嵌入式开发环境、FPGA自适应调试和对Altera工具的兼容。 1.1 DS-5 eclipse破解 首先下载破解器 然后进入cmd运行&#xff0c;进入到破解器所在文…...

无涯教程-Lua - Iterators(迭代器)

迭代器是一种构造&#xff0c;使您可以遍历所谓的集合或集合的元素。在Lua中&#xff0c;这些集合通常引用表&#xff0c;这些表用于创建各种数据结构(如数组)。 通用迭代器 通用的 for 迭代器提供集合中每个元素的键值对。下面给出一个简单的示例。 array{"Lua",…...

HTML+CSS+JavaScript:实现B站评论发布效果

一、需求 1、用户输入内容&#xff0c;输入框左下角实时显示输入字数 2、为避免用户输入时在内容左右两端误按多余的空格&#xff0c;在发送评论时&#xff0c;检测用户输入的内容左右两端是否带有空格&#xff0c;若有空格&#xff0c;发布时自动取消左右两端的空格 3、若用…...

实战 - 利用 ThreadLocal 线程局部变量实现数据缓存

文章目录 1. 利用 ThreadLocal 缓存 AssetBranchCache 数据1. 定义 AssetBranchCache 类2. 定义 BranchContext 类操作 AssetBranchCache 对象3. 配置拦截器实时更新和清除缓存数据4. 定义 SaasThreadContextDataHolderBranch 类持有 AssetBranchCache 对象5. 定义 SaasThreadC…...

wxwidgets Ribbon使用简单实例

// RibbonSample.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <wx/wx.h> #include "wx/wxprec.h" #include "wx/app.h" #include "wx/frame.h" #include "wx/textctrl.h" #include "…...

2023年第四届“华数杯”数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; 最短时间生产计划模型 该模型出现在好几个竞赛赛题上&#x…...

LeetCode404. 左叶子之和

404. 左叶子之和 文章目录 [404. 左叶子之和](https://leetcode.cn/problems/sum-of-left-leaves/)一、题目二、题解方法一&#xff1a;递归方法二&#xff1a;迭代 一、题目 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9…...

Nginx 高性能内存池 ----【学习笔记】

跟着这篇文章学习&#xff1a; c代码实现一个高性能内存池&#xff08;超详细版本&#xff09;_c 内存池库_linux大本营的博客-CSDN博客https://blog.csdn.net/qq_40989769/article/details/130874660以及这个视频学习&#xff1a; nginx的内存池_哔哩哔哩_bilibilihttps://w…...

iOS--frame和bounds

坐标系 首先&#xff0c;我们来看一下iOS特有的坐标系&#xff0c;在iOS坐标系中以左上角为坐标原点&#xff0c;往右为X正方向&#xff0c;往下是Y正方向如下图&#xff1a; bounds和frame都是属于CGRect类型的结构体&#xff0c;系统的定义如下&#xff0c;包含一个CGPoint…...

docker logs 使用说明

docker logs 可以查看某个容器内的日志情况。 前置参数说明 c_name容器名称 / 容器ID logs 获取容器的日志 , 命令如下&#xff1a; docker logs [options] c_name option参数&#xff1a; -n 查看最近多少条记录&#xff1a;docker logs -n 5 c_name--tail与-n 一样 &#…...

Ceph入门到精通-Ceph PG状态详细介绍(全)

本文主要介绍PG的各个状态&#xff0c;以及ceph故障过程中PG状态的转变。 Placement Group States&#xff08;PG状态&#xff09; creating Ceph is still creating the placement group. Ceph 仍在创建PG。activating The placement group is peered but not yet active.…...

【数据结构】二叉树、二叉搜索树、平衡二叉树、红黑树、B树、B+树

概述 二叉树&#xff08;Binary Tree&#xff09;&#xff1a;每个节点最多有两个子节点&#xff08;左子节点和右子节点&#xff09;&#xff0c;没有限制节点的顺序。特点是简单直观&#xff0c;易于实现&#xff0c;但查找效率较低。 二叉搜索树&#xff08;Binary Search…...

【JVM】(二)深入理解Java类加载机制与双亲委派模型

文章目录 前言一、类加载过程1.1 加载&#xff08;Loading&#xff09;1.2 验证&#xff08;Verification&#xff09;1.3 准备&#xff08;Preparation&#xff09;1.4 解析&#xff08;Resolution&#xff09;1.5 初始化&#xff08;Initialization&#xff09; 二、双亲委派…...

npm i 报错项目启动不了解决方法

1.场景 在另一台电脑低版本node环境跑的react项目&#xff0c;换到另一台电脑node18环境执行npm i时候报错 2.解决方法 脚本前加上set NODE_OPTIONS--openssl-legacy-provider...

从静态展示到动态仪表盘:用Vue和ECharts打造一个实时数据刷新的世界疫情/经济地图

从静态展示到动态仪表盘&#xff1a;用Vue和ECharts打造实时数据刷新的世界疫情/经济地图 当数据可视化从静态图表升级为动态仪表盘时&#xff0c;整个系统的业务价值会发生质的飞跃。想象一下&#xff0c;一个全球疫情监控大屏上&#xff0c;各国感染数据以热力图形式实时流动…...

别再死记硬背MobileNet了!用GhostNet+SE模块在树莓派上部署轻量级图像识别模型

在树莓派上实战GhostNetSE&#xff1a;轻量级图像识别的工程优化指南 当你在树莓派的资源限制下挣扎着运行MobileNet时&#xff0c;是否想过还有更优雅的解决方案&#xff1f;GhostNet的出现彻底改变了我们对轻量化网络的认知——它不再只是简单地削减参数&#xff0c;而是通过…...

SOCD Cleaner终极指南:如何解决游戏键盘输入冲突问题

SOCD Cleaner终极指南&#xff1a;如何解决游戏键盘输入冲突问题 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在竞技游戏的世界里&#xff0c;每一次按键都至关重要。你是否曾在激烈的战斗中因为同时按下相反…...

C语言完美演绎8-7

/* 范例&#xff1a;8-7 */#include <stdio.h>void arith(int); /* 函数arith()在本范例中&#xff0c;可以不必有原型声明 */void arith(int k) /* 传值方式 */{k;}/* 函数arith()在传递参数时&#xff0c;int k所执行的动作为 int k;k i;&#xff0c;也就是先…...

从零到一:用P、V原语解决经典并发问题(附实战代码解析)

1. 为什么我们需要P、V原语&#xff1f; 想象一下周末去网红餐厅吃饭的场景。当服务员告诉你"现在没有空位&#xff0c;请取号等待"时&#xff0c;你手中的号码牌其实就是一种信号量——它既记录了排队人数&#xff08;同步&#xff09;&#xff0c;也确保了叫号时不…...

实锤了!Hermes被爆抄袭中国团队代码

4月15日&#xff0c;中国AI团队EvoMap公开发布了一份技术对比报告&#xff0c;直指硅谷明星AI项目Hermes Agent的核心自进化能力&#xff0c;是对其Evolver引擎的系统性复刻。报告包含完整的事件时间戳和代码对比等&#xff0c;证据链清晰、扎实。海外科技媒体瞬间沸腾了。这不…...

SPOOLing 技术(假脱机技术)独占设备 → 虚拟共享设备

一、基础定义与核心定位 SPOOLing 全称&#xff1a;Simultaneous Peripheral Operations On-Line 中文&#xff1a;假脱机技术 一句话核心&#xff1a; 在联机状态下&#xff0c;用软件模拟实现脱机I/O的效果&#xff0c;将低速独占设备虚拟成高速共享设备&#xff0c;让 CPU 与…...

解决‘找不到.so文件’:GCC动态链接库编译成功后运行报错的三种终极解决方案

解决‘找不到.so文件’&#xff1a;GCC动态链接库编译成功后运行报错的终极指南 当你满心欢喜地用gcc -fPIC -shared编译好动态库&#xff0c;再用gcc main.c -L. -lxxx生成可执行文件&#xff0c;却在运行时遭遇"error while loading shared libraries: libxxx.so: canno…...

幻境·流金入门必看:DiffSynth-Studio+玄金美学环境搭建详解

幻境流金入门必看&#xff1a;DiffSynth-Studio玄金美学环境搭建详解 “流光瞬息&#xff0c;影画幻成。” 你是否曾幻想过&#xff0c;只需输入一段文字描述&#xff0c;就能在十几秒内获得一张细节丰富、质感堪比电影画面的高清图像&#xff1f;这听起来像是科幻电影里的场景…...

别再手动写JCo3.0连接代码了!用Spring Boot整合SAP RFC接口的完整配置流程

Spring Boot与SAP JCo3.0深度整合&#xff1a;告别繁琐的手工RFC调用 在传统企业IT架构中&#xff0c;SAP系统往往扮演着核心业务中枢的角色。当Java开发者需要与SAP进行数据交互时&#xff0c;JCo3.0&#xff08;Java Connector&#xff09;几乎是绕不开的技术选择。但原生JCo…...