【中等】73. 矩阵置零

题目

73. 矩阵置零
给定一个 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:
输入: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) 的额外空间,但这仍然不是最好的解决方案。
你能想出一个仅使用常量空间的解决方案吗?

解题

func setZeroes(matrix [][]int)  {m := len(matrix)n := len(matrix[0])lines := [200]bool{}rows := [200]bool{}for i:=0; i<m;i++{for j:=0;j<n;j++{if matrix[i][j]==0{lines[i]=truerows[j]=true}}}for i:=0; i<m;i++{for j:=0;j<n;j++{if lines[i]==true || rows[j]==true{matrix[i][j] = 0}}}}

题解

方法一:使用标记数组

这个不难想,但是代码写的很不整洁规范

func setZeroes(matrix [][]int) {row := make([]bool, len(matrix))col := make([]bool, len(matrix[0]))for i, r := range matrix {for j, v := range r {if v == 0 {row[i] = truecol[j] = true}}}for i, r := range matrix {for j := range r {if row[i] || col[j] {r[j] = 0}}}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/set-matrix-zeroes/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

时间:O(mn)
空间:O(m+n)

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

用矩阵的第一行和第一列代替方法一中的两个标记数组,以达到 O(1)O(1)O(1) 的额外空间。

func setZeroes(matrix [][]int) {n, m := len(matrix), len(matrix[0])row0, col0 := false, falsefor _, v := range matrix[0] {if v == 0 {row0 = truebreak}}for _, r := range matrix {if r[0] == 0 {col0 = truebreak}}for i := 1; i < n; i++ {for j := 1; j < m; j++ {if matrix[i][j] == 0 {matrix[i][0] = 0matrix[0][j] = 0}}}for i := 1; i < n; i++ {for j := 1; j < m; j++ {if matrix[i][0] == 0 || matrix[0][j] == 0 {matrix[i][j] = 0}}}if row0 {for j := 0; j < m; j++ {matrix[0][j] = 0}}if col0 {for _, r := range matrix {r[0] = 0}}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/set-matrix-zeroes/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

时间:O(mn)
空间:O(1)

长进

  1. lines := [m]bool{}无法用于不定数值初始化,使用make()函数完成创建。row := make([]bool, len(matrix))
  2. for 循环真的幼稚,还没改到GO特有的for-range应用中。
  3. 哈哈哈哈 row也是行,column才是列。好蠢。

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

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

相关文章

RK3568平台(网络篇)添加网络交换芯片RTL8306M

一.硬件原理图 分析&#xff1a; 该交换芯片支持I2C、SPI、mdio通信&#xff0c;但是看ast1520的uboot代码采用的是mdio去通信phy芯片的&#xff0c;所以暂时也先采用mdio的方式&#xff0c;需要配置相应的引脚才可以配置成mdio通信模式&#xff0c;具体的配置硬件工程师解决。…

妙妙区间dp(从大往小,计算小对大的贡献(2^n的区间dp))AGC035D

https://www.luogu.com.cn/problem/AT_agc035_d 设 f ( l , r , f l , f r ) f(l,r,fl,fr) f(l,r,fl,fr) 表示现在在区间 [ l , r ] [l,r] [l,r]&#xff0c; a l − 1 1 a_{l-1}1 al−1​1 对答案贡献为 f l fl fl&#xff0c; f r fr fr 同理。 然后枚举最后一次操作的…

使用netcore编写对比excel差异

一、新建项目Vlook项目 using MiniExcelLibs; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Data; using System.IO;namespace Vlook {internal class Program{static void Main(string[] args){var dir App…

L1-046:整除光棍

题目描述 这里所谓的“光棍”&#xff0c;并不是指单身汪啦~ 说的是全部由1组成的数字&#xff0c;比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如&#xff0c;111111就可以被13整除。 现在&#xff0c;你的程序要读入一个整数x&#xff0c;这个…

LeetCode-2454. 下一个更大元素 IV【栈 数组 二分查找 排序 单调栈 堆(优先队列)】

LeetCode-2454. 下一个更大元素 IV【栈 数组 二分查找 排序 单调栈 堆&#xff08;优先队列&#xff09;】 题目描述&#xff1a;解题思路一&#xff1a;单调栈&#xff0c;典型的单调栈问题&#xff0c;不过这里用的是双单调栈&#xff0c;因为是找第二大整数。我们用第一个栈…

通义千问关于网络模块的专业知识能力正确率测试

闲着无聊&#xff0c;就用问答区的一个问题&#xff0c;去考验了通义千问&#xff0c;结果优点出乎意料。 我们来看一下具体的问题&#xff0c;这里&#xff0c;我准备了三个问题&#xff1a; 第一个问题&#xff1a;11.192.0.x 注意&#xff0c;这里我并没有增加任何的辅助提…

关于文件操作---C语言

引言 关于文件&#xff0c;想必大家或多或少都会有些了解&#xff0c;文件可以帮我们储存数据&#xff0c;不同格式的文件可以储存不同类型的数据&#xff0c;也可以将文件中的数据用不同的方式打开。电脑中的文件&#xff0c;是放在硬盘上的。在我们编写代码并运行的时候&…

vue中的常见使用

文章目录 datacomputedwatch深层监听 methods 这里是记录一下常规的使用 data 最常用的&#xff0c;定义一些使用到的数据&#xff0c;以一种函数的表现方式 data(){return{} }声明的数据写在return中 computed 较少使用&#xff0c;称为计算属性。 从名称和使用方式来看&a…

谣言检测常用评价指标

谣言检测通常是一个二分类任务&#xff0c;常用评价指标包括Precision、Recall、Accuracy、F1-score、Micro-F1、Macro-F1等。 Precision和Recall 名称含义TP(True Positive)真阳性 预测为正&#xff0c;实际为正FP(False Positive)假阳性 预测为正&#xff0c;实际为负TN(Tr…

金蝶云星空表单插件获取复选框的值

文章目录 金蝶云星空表单插件获取复选框的值 金蝶云星空表单插件获取复选框的值 object getPur this.View.Model.GetValue("F_XHWT_IsPur", rowIndexV);bool isSerial !Convert.ToBoolean(itemClose["F_XHWT_IsPur"] "");取得值可以直接转换成…

Datawhale聪明办法学Python(task3变量与函数)

一、课程基本结构 课程开源地址&#xff1a;课程简介 - 聪明办法学 Python 第二版 章节结构&#xff1a; Chapter 0 安装 Installation Chapter 1 启航 Getting Started Chapter 2 数据类型和操作 Data Types and Operators Chapter 3 变量与函数 Variables and Functions Ch…

论文写作☞结论怎么写?

论文的结论部分是整篇论文的总结和归纳&#xff0c;需要简明扼要地概括研究的主要内容和发现&#xff0c;同时也需要回答研究问题和假设。以下是结论部分的写作建议&#xff1a; 1.首先&#xff0c;简要概括研究的主要内容和发现&#xff0c;强调研究的重要性和贡献。 2.接着…

Cortex-M4内核结构

Cortex-M4内核结构 1. 内核Core 2. 三阶流水线 3. 内核工作模式 4. 总结 Cortex-M4内核结构 Cortex-M4处理器是ARMv7-M架构的一种实现&#xff0c;它是一种32位精简指令集(Reduced Instruction Set Computing, RISC)的处理器&#xff0c;有一个三阶的指令流水线&#xff0c;依…

飞天使-docker知识点4-harbor

文章目录 Harbor安装完成harbor 官方建议方式之后查看 images配置docker 使用harbor 仓库上传下载镜像docker 镜像结合harbor 运行 Harbor Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器&#xff0c;由 vmware 开源&#xff0c;其通过添加一些企业必需的功…

C++初阶-list类的模拟实现

list类的模拟实现 一、基本框架1.1 节点类1.2 迭代器类1.3 list类 二、构造函数和析构函数2.1 构造函数2.2 析构函数 三、operator的重载和拷贝构造3.1 operator的重载3.2 拷贝构造 四、迭代器的实现4.1 迭代器类中的各种操作4.1 list类中的迭代器 五、list的增容和删除5.1 尾插…

leetcode 股票问题全序列

1 只允许一次交易&#xff0c;121题&#xff0c;买卖股票的最佳时机 class Solution {/*给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票…

Python机器学习预测房价

&#x1f517; 运行环境&#xff1a;Python &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 &#x1f510;#### 防伪水印——左手の明天 ####&#x1f510; &#x1f497; 大家…

Visual Studio 2022封装C代码为x64和x86平台动态库

1.引言 本文介绍如何使用Visual Studio 2022将C语言函数封装成x64和x86平台上使用的动态链接库(dll文件)并生成对应的静态链接库(lib文件)&#xff0c;以及如何在C程序中调用生成的dll。 程序下载&#xff1a; 2.示例C语言程序 假设需要开发一个动态链接库&#xff0c;实现复…

为什么大多数TCP服务器采用多线程,以及如何从头开始构建一个多线程的TCP服务器

目录 前言 了解TCP服务器 设置TCP服务器 接受客户端的连接 读取并响应请求 实现一个循环以进行连续操作 Java举例 结论 前言 TCP是一种在计算机网络中用于机器之间通信的最可靠的方法在本文中&#xff0c;我们将探讨一个Web服务器如何处理和为多个TCP连接提供服务为了更…

Python exec() 函数初探

你好&#x1f596;&#xff0c;我是简讯&#xff01;一枚野生程序员。热爱编程&#xff0c;但目前的工作与编程毫无关系。 正在尝试各种副业&#xff0c;目前有做&#xff1a; 红包封面商城中视频计划 想要零成本一起参与红包封面商城的可以看这篇文章&#xff1a;副业实践&…