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

刷题小计六:矩阵

73.矩阵置零 mid

矩阵置零 

①先使用两个变量(row_0 & col_0),记录「首行 & 首列」是否该被置零

②在「非首行首列」的位置,存储置零信息到首行首列

        // 把第一行第一列作为标志位
        for (int i = 1; i < row; i++) {
            for (int j = 1; j < col; j++) {
                if (matrix[i][j] == 0) {
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }

置零,遍历第二次

        for (int i = 1; i < row; i++) {
            for (int j = 1; j < col; j++) {
                if (matrix[i][0] == 0 || matrix[0][j] == 0){
                    matrix[i][j] = 0;
                }
            }
        }

④使用 r0 & c0 ,置零「首行 & 首列」 

54.螺旋矩阵 mid

螺旋矩阵

循环打印: “从左向右、从上向下、从右向左、从下向上” 四个方向循环打印。
根据边界打印,即 将元素按顺序添加至列表 res 尾部。
边界向内收缩 1 (代表已被打印)。
判断边界是否相遇(是否打印完毕),若打印完毕则跳出。

48.旋转图像 mid

旋转图像

对于矩阵任意第 i 行、第 j 列元素 matrix[i][j] ,矩阵旋转 90º 后「元素位置旋转公式」为:

由于第 1 步 D→A 已经将 A 覆盖(导致 A 丢失),此丢失导致最后第 4 步 A→B 无法赋值。为解决此问题,考虑借助一个「辅助变量 tmp 」预先存储 A 

根据开头的元素旋转公式:

int temp = matrix[i][j];
matrix[i][j] = matrix[n - 1 - j][i];
matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];
matrix[j][n - 1 - i] = temp;

当矩阵大小 n 为偶数时,取前 n / 2行、前  n / 2  列的元素为起始点;

当矩阵大小 n 为奇数时,取前  n / 2行、前  (n + 1) / 2  列的元素为起始点; 风车型旋转

 

复杂度分析

时间复杂度 O(N ^2) : 其中 N 为输入矩阵的行(列)数。需要将矩阵中每个元素旋转到新的位置,即对矩阵所有元素操作一次,使用 O(N ^ 2) 时间。
空间复杂度 O(1) : 临时变量 tmp 使用常数大小的额外空间。值得注意,当循环中进入下轮迭代,上轮迭代初始化的 tmp 占用的内存就会被自动释放,因此无累计使用空间。 

部分图文作者:Krahets
链接:https://leetcode.cn/problems/rotate-image/solutions/1228078/48-xuan-zhuan-tu-xiang-fu-zhu-ju-zhen-yu-jobi/
来源:力扣(LeetCode)

240.搜索二维矩阵 mid

搜索二维矩阵 II

抽象二叉搜索树


http://www.kler.cn/news/341488.html

相关文章:

  • 【fastjson】json对象格式化打印
  • 2015年国赛高教杯数学建模C题月上柳梢头解题全过程文档及程序
  • 无人自助超市系统小程序源码开发
  • 谈谈bluestore与rocksdbstore(未完,待续)
  • 什么是网络信息安全?
  • 考研笔试/上机经典编程题集合(持续更新并完善解题思路)
  • 2024 kali虚拟机安装教程,分两大步骤,图文讲解(1)
  • 云原生日志ELK( logstash安装部署)
  • ABB机器人20195故障报警原因分析
  • 【基础介绍】【OCR】
  • 【微服务】链路追踪 - Micrometer(day9)
  • IT招聘乱象的全面分析
  • 13种pod的状态
  • NL2SQL之DB-GPT-Hub详解篇:text2sql任务的微调框架和基准对比
  • ctfshow-web 萌新题
  • C++——模拟实现list
  • 2.1类和对象(上)
  • useradd命令:添加Linux新用户
  • 学习干货IF=93.6!开发临床预测模型:分步指南
  • 使用 SSH/SFTP 方法来实现 Windows 和 Kali Linux 之间的文件共享(fileZilla)