LeetCode 热题 100 | 矩阵

目录

1  73. 矩阵置零

2  54. 螺旋矩阵

3  48. 旋转图像

4  240. 搜索二维矩阵 II


菜鸟做题第二周,语言是 C++

1  73. 矩阵置零

解题思路:

  1. 遍历矩阵,寻找等于 0 的元素,记录对应的行和列
  2. 将被记录的行的元素全部置 0
  3. 将被记录的列的元素全部置 0
class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {int n = matrix.size(), m = matrix[0].size();unordered_set<int> row, col;// 寻找0for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (matrix[i][j] == 0) {row.insert(i);col.insert(j);}}}// 行置0for (auto &r:row) {for (int j = 0; j < m; ++j) {matrix[r][j] = 0;}}// 列置0for (auto &c:col) {for (int i = 0; i < n; ++i) {matrix[i][c] = 0;}}}
};

2  54. 螺旋矩阵

解题思路:

  • 定义 right,down,left,up 来标志四个方向
  • 根据不同的方向设置不同的坐标加减策略
  • 将被遍历过的元素置为 101,用于指示能否继续前进
  • 借助 ans.size() 计数,用于指示是否继续循环

为什么将被遍历过的元素置为 101?

如上图所示,101 是矩阵元素绝对不会取到的数值。

如果题目对取值范围没有限制的话,那可能真的需要定义另一个矩阵来记录遍历情况了。

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int right = 1, down = 0, up = 0, left = 0;vector<int> ans;int n = matrix.size(), m = matrix[0].size();int i = 0, j = 0;while (ans.size() != n * m) {if (right) {while (j < m && matrix[i][j] != 101) {ans.push_back(matrix[i][j]);matrix[i][j] = 101;++j;}--j;++i;right = 0;down = 1;}if (down) {while (i < n && matrix[i][j] != 101) {ans.push_back(matrix[i][j]);matrix[i][j] = 101;++i;}--i;--j;down = 0;left = 1;}if (left) {while (j >= 0 && matrix[i][j] != 101) {ans.push_back(matrix[i][j]);matrix[i][j] = 101;--j;}++j;--i;left = 0;up = 1;}if (up) {while (i >= 0 && matrix[i][j] != 101) {ans.push_back(matrix[i][j]);matrix[i][j] = 101;--i;}++i;++j;up = 0;right = 1;}}return ans;}
};

3  48. 旋转图像

报一丝,还是用了新的矩阵,以后想想其他办法。。。

class Solution {
public:void rotate(vector<vector<int>>& matrix) {auto temp = matrix;int n = matrix.size();for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {temp[i][j] = matrix[n - 1 - j][i];}}matrix = temp;}
};

4  240. 搜索二维矩阵 II

笨办法,但意外的是没超时

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int n = matrix.size(), m = matrix[0].size();int i = 0, j = 0;while (i < n && j < m && matrix[i][j] <= target) {if (matrix[i][j] == target) return true;++i;++j;}// 针对n<m且找到头的情况if (i == n) {--i;while (j < m && matrix[i][j] <= target) {if (matrix[i][j] == target) return true;++j;}if (j == m) return false;for (int y = j; y < m; ++y) {for (int x = i; x >= 0; --x) {if (matrix[x][y] == target) return true;}}}// 针对n>m的情况且找到头的情况if (j == m) {--j;while (i < n && matrix[i][j] <= target) {if (matrix[i][j] == target) return true;++i;}if (i == n) return false;for (int x = i; x < n; ++x) {for (int y = j; y >= 0; --y) {if (matrix[x][y] == target) return true;}}}for (int x = i; x < n; ++x) {for (int y = j; y >= 0; --y) {if (matrix[x][y] == target) return true;}}for (int y = j; y < m; ++y) {for (int x = i; x >= 0; --x) {if (matrix[x][y] == target) return true;}}return false;}
};

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

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

相关文章

k8s 进阶实战笔记 | Scheduler 调度策略总结

文章目录 Scheduler 调度策略总结调度原理和过程调度策略nodeSelect亲和性和反亲和性NodeAffinify亲和验证PodAffinity 亲和验证PodAntiAffinity 反亲和验证污点与容忍跳过 Scheduler 调度策略 调度策略场景总结 Scheduler 调度策略总结 调度原理和过程 Scheduler 一直监听着…

【心得】java JNDI配合RMI实现注入个人笔记

目录 JNDI RMI 基本概念 RMI 基本逻辑 恶意利用 JNDI注入RMI实现攻击 JNDI Java Naming and Directory Interface Java 命令和目录接口 让配置参数 和 代码 解耦的规范或者思想 低耦合 高内聚 Name 命名 java对象 通过 命名 绑定到 容器环境 java对象和一个特定的…

REVIT二次开发万能刷

将这两个参数赋予其他参数 步骤2 将来做个可以调控的版本 using System; using System.Collections.Generic; using System.Lin

华为机考入门python3--(4)牛客4-字符串分隔

分类&#xff1a;字符串 知识点&#xff1a; 复制符号* 复制3个0 0*3 000 字符串截取 截取第i位到j-1位 str[i:j] 题目来自【牛客】 input_str input().strip()# 先补齐 if len(input_str) % 8 ! 0: input_str 0 * (8 - len(input_str) % 8) # 每8个分 out…

uniapp微信小程序-请求二次封装(直接可用)

一、请求封装优点 代码重用性&#xff1a;通过封装请求&#xff0c;你可以在整个项目中重用相同的请求逻辑。这样一来&#xff0c;如果 API 发生变化或者需要进行优化&#xff0c;你只需在一个地方修改代码&#xff0c;而不是在每个使用这个请求的地方都进行修改。 可维护性&a…

JAVA学习笔记三

1.java执行流程分析 2.什么是编译 javac Hello.java 1.有了java源文件&#xff0c;通过编译器将其编译成JVM可以识别的字节码文件 2.在该源文件目录下&#xff0c;通过javac编译工具对Hello.java文件进行编译 3.如果程序没有错误&#xff0c;没有任何提示&#xff0c;但在…

Linux下的进程操作

进程概念 ps -elf&#xff1a;查看操作系统的所有进程&#xff08;Linux命令&#xff09; ctrl z&#xff1a;把进程切换到后台 crtl c&#xff1a;结束进程 fg&#xff1a;把进程切换到前台 获取进程进程号和父进程号 函数原型&#xff1a; pid_t getpid(void); //pid_t…

文件上传之大文件分块上传进度控制处理

在分块上传内容结束以后的事件监听&#xff0c;我们会实现 unlinkSync 删除临时文件操作&#xff0c;那么试想一下&#xff0c;在这个事件监听中&#xff0c;我们是否可以通过totalChunks以及currentChunk获取当前上传的进度情况呢&#xff1f; 后端 upload上传接口&#xff…

【GitHub项目推荐--十六进制编辑器】【转载】

一款名为 ImHex 的十六进制编辑器获得了 15.3k 的 Star。十六进制编辑器可以让你以十六进制的形式查看或编辑文件的二进制数据&#xff0c;并用较为友好的界面来编辑二进制数据&#xff0c;和常见的十六进制编辑器 GNOME Hex Editor 等不一样&#xff0c;ImHex 功能非常强大&am…

Unity 光照

光照烘培 光照模式切换为 Baked 或 Mixed&#xff0c;Baked 模式完全使用光照贴图模拟光照&#xff0c;运行时修改光照颜色不生效&#xff0c;Mixed 模式也使用光照贴图&#xff0c;并且进行一些实时运算&#xff0c;运行时修改光照颜色会生效 受光照影响的物体勾选 Contribute…

02-opencv-上

机器视觉概述 机器视觉是人工智能正在快速发展的一个分支。简单说来&#xff0c;机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品(即图像摄取装置&#xff0c;分CMOS和CCD两种)将被摄取目标转换成图像信号&#xff0c;传送给专用的图像处理系统&…

Cortex-M4外设

关于Cortex-M4外设 专用外设总线&#xff08;PPB&#xff09;的地址映射为&#xff1a; 软件可以读取MPU类型寄存器0xE000ED90&#xff0c;以测试是否存在内存保护单元&#xff08;MPU&#xff09;。 Privileged&#xff1a;只有特权软件才能访问寄存器。Unprivileged&#…

Spring Cloud + Vue前后端分离-第13章 网站开发

源代码在GitHub - 629y/course: Spring Cloud Vue前后端分离-在线课程 Spring Cloud Vue前后端分离-第13章 网站开发 13-1 网站模块的搭建 新建web模板 1.网站开发&#xff0c;增加web模块&#xff0c;使用命令&#xff1a;vue create web vue版本4.2.3 大家拿到一个v…

浪花 - 后端接口完善

一、队伍已加入用户数量 1. 封装的响应对象 UserTeamVO 新增字段 hasJoinNum 2. 查询队伍 id 列表 3. 分组过滤&#xff0c;将 team_id 相同的 userTeam 分到同一组 4. 获取每一组的 userTeam 数量&#xff0c;即一个 team_id 对应几个userTeam&#xff08;用户数量&#x…

Qt两种定时器

QT 中使用定时器&#xff0c;有两种方式&#xff1a; 定时器类&#xff1a;QTimer定时器事件&#xff1a;QEvent::Timer&#xff0c;对应的子类是 QTimerEvent 简单讲一下两种用法&#xff1a; QTimer&#xff1a; QTimer 需要创建QTimer对象 然后需要给定时器绑定 定时器超…

Qt : Style Sheet

When a style sheet is active, the QStyle returned by QWidget::style() is a wrapper “style sheet” style, not the platform-specific style. The wrapper style ensures that any active style sheet is respected and otherwise forwards the drawing operations to t…

消息中间件之RocketMQ(四)

RocketMQ高性能背后的核心原理 1.读队列与写队列 在RocketMQ的管理控制台创建Topic时&#xff0c;可以看到要单独设置读队列和写队列。 通常在运行时&#xff0c;都需要设置读队列写队列。perm字段表示Topic的权限&#xff0c;有三个可选项 2&#xff1a;禁写禁订阅 4: 可订阅…

【前端web入门第二天】01 html语法实现列表与表格

html语法实现列表与表格 文章目录: 1.列表 1.1 无序列表1.2 有序列表1.3 定义列表 2.表格 2.1 表格基本结构2.2 表格结构标签 写在最前,第二天学习目标: 列表 表格 表单 元素为嵌套关系 1.列表 作用:布局内容排列整齐的区域。 列表分类:无序列表、有序列表、定义列表。 1…

pysot中eval多种算法比较和画图

安装miktex和Texwork&#xff0c;记得更新miktex&#xff0c;链接https://miktex.org/download&#xff0c; 参考https://blog.csdn.net/weixin_42495721/article/details/110855071 我用的是pysot官方的库&#xff0c;里面包括eval和test、train等py文件。 路径结构为&#x…

大数据期望最大化(EM)算法:从理论到实战全解析

文章目录 大数据期望最大化&#xff08;EM&#xff09;算法&#xff1a;从理论到实战全解析一、引言概率模型与隐变量极大似然估计&#xff08;MLE&#xff09;Jensen不等式 二、基础数学原理条件概率与联合概率似然函数Kullback-Leibler散度贝叶斯推断 三、EM算法的核心思想期…