Leetcode Hot100之矩阵

1. 矩阵置零

  • 题目描述
    给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
    在这里插入图片描述
  • 解题思路
    题目要求进行原地更改,也就是不能使用额外的空间,因此我们可以使用第一行的元素来记录对应的每一列是不是该置零,用第一列的元素来记录对应的每一行是不是该置零。但是这样的话就会有一个问题,就是第一行和第一列的元素会被覆盖,因此我们在覆盖第一行和第一列的元素前,需要额外的两个变量row_0_flag和col_0_flag来记录第一行和第一列是不是该置零。
    时间复杂度:O(m*n) 空间复杂度:O(1)
  • 代码
    class Solution:
        def setZeroes(self, matrix: List[List[int]]) -> None:
            """
            Do not return anything, modify matrix in-place instead.
            """
            m = len(matrix)
            if m == 0:
                return 
            n = len(matrix[0])
            # 在使用第一行和第一列进行记录之前,先把第一行和第一列是否需要置零给求出来
            row_0_flag = False
            for i in range(n):
                if matrix[0][i] == 0:
                    row_0_flag = True
                    break
            col_0_flag = False
            for i in range(m):
                if matrix[i][0] == 0:
                    col_0_flag = True
                    break
            # 使用第一行和第一列进行记录
            for i in range(1, m):
                for j in range(1, n):
                    if matrix[i][j] == 0:
                        matrix[i][0] = 0
                        matrix[0][j] = 0
            for i in range(1, m):
                for j in range(1, n):
                    if (matrix[i][0] == 0 or matrix[0][j] == 0) and matrix[i][j] != 0:
                        matrix[i][j] = 0
            if row_0_flag:
                for i in range(n):
                    matrix[0][i] = 0
            if col_0_flag:
                for i in range(m):
                    matrix[i][0] = 0
    

2. 螺旋矩阵

  • 题目描述
    给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
    在这里插入图片描述
  • 解题思路
    1. 首先确认螺旋的圈数,圈数是(min(m, n) + 1) // 2,也就是最外层的循环数。
    2. 在每一圈中,我们需要分别从左到右,从上到下,从右到左,从下到上四个方向遍历,在解题时可以现在纸上把每个方向遍历的起始位置和终止位置写出来,这样就很容易写出代码。
    3. 注意在从右往左、从下到上遍历的时候,要判断是不是和从左往右、从上往下是不是一行,是一行的话就不用遍历了。
      时间复杂度:O(m*n) 空间复杂度:O(1)
  • 代码
    class Solution:
        def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
            m = len(matrix)
            n = len(matrix[0])
            iters = (min(m, n) + 1) // 2
            res = []
            for i in range(iters):
                # 从左往右打印
                for j in range(i, n - i):
                    res.append(matrix[i][j])
                # 从上往下打印
                for j in range(i + 1, m - i):
                    res.append(matrix[j][n - 1 - i])
                # 从右往左打印,此时要判断是不是和从左往右打印的是一行,是一行的话很明显就不用打印了
                if m - i - 1 > i:
                    for j in range(n - 2 - i, i - 1, -1):
                        res.append(matrix[m - i - 1][j])
                # 从下往上打印,此时要判断是不是和从上往下打印是一列,是一列的话很明显就不用打印了
                if i < n - 1 - i:
                    for j in range(m - i - 2, i, -1):
                        res.append(matrix[j][i])
            return res
    
    

3. 旋转图像

  • 题目描述
    给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

    你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

  • 解题思路
    先转置,再左右镜像

  • 代码

    class Solution:
        def rotate(self, matrix: List[List[int]]) -> None:
            """
            Do not return anything, modify matrix in-place instead.
            """
            n = len(matrix)
            # 转置
            for i in range(n):
                for j in range(i + 1, n):
                    matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
            # 左右镜像
            for i in range(n):
                l, r = 0, n - 1
                while l < r:
                    matrix[i][l], matrix[i][r] = matrix[i][r], matrix[i][l]
                    l += 1
                    r -= 1
    

4. 搜索二维矩阵 II

  • 题目描述
    编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

    每行的元素从左到右升序排列。
    每列的元素从上到下升序排列。
    在这里插入图片描述

  • 解题思路
    二分查找:从左上角开始搜索,小于target的话向下查找,大于target的话向左查找

  • 代码

    class Solution:
        def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
            m = len(matrix)
            n = len(matrix[0])
            i = 0
            j = n - 1
            while i < m and j >= 0:
                if matrix[i][j] == target:
                    return True
                elif matrix[i][j] > target:
                    j -= 1
                else:
                    i += 1
            return False
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【软件下载】Folx详细安装教程视频-Folx软件最新版下载

根据大数据调查表明Acceleration PRO下载&#xff1a;抽出多达10个流的故障能够显着提高下载速度。根据行业数据显示与iTunes PRO集成&#xff1a;通过将Folx集成到iTunes来下载歌曲和视频&#xff0c;能够在下载后立即自动添加到iTunes库。实际上我们可以这样讲通过代理下载&a…

Git 冲突处理指南:恢复 Git Reset

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三连支…

10个AI高考上岸朋友圈文案设计

高考是人生中的一个重要时刻&#xff0c;上岸后分享朋友圈的文案可以既表达喜悦&#xff0c;也可以展现对未来的期待。以下是10个不同风格的高考上岸朋友圈文案&#xff0c;供你参考&#xff1a; 1. **梦想成真版**&#xff1a; "十年磨一剑&#xff0c;今朝试锋芒。高…

After Effects 2024 mac/win版:创意视效,梦想起航

After Effects 2024是一款引领视效革命的专业软件&#xff0c;汇聚了创意与技术的精华。作为Adobe推出的全新版本&#xff0c;它以其强大的视频处理和动画创作能力&#xff0c;成为从事设计和视频特技的机构&#xff0c;如电视台、动画制作公司、个人后期制作工作室以及多媒体工…

【Linux】进程信号_2

文章目录 八、进程信号1. 信号 未完待续 八、进程信号 1. 信号 除了可以使用 kill 命令和键盘来生成信号&#xff0c;我们也可以使用系统调用来生成信号。 kill函数可以对指定进程发送指定信号。 使用方法&#xff1a; int main(int argc, char *argv[]) {if (argc ! 3) {c…

利用viztracer进行性能分析和优化

上一篇文章&#xff0c;我们详细讲解了scalene这个性能分析和优化工具的使用流程&#xff1b;今天&#xff0c;我们将深入探讨另一个性能分析和优化工具——viztracer。 什么是viztracer&#xff1f; viztracer是一个非常强大的分析器&#xff0c;可以生成详细的性能报告和可…

信号与系统实验-实验五 离散时间系统的时域分析

一、实验目的 1、理解离散信号的定义与时域特征&#xff0c;掌握在时域求解信号的各种变换运算&#xff1b; 2、掌握离散系统的单位响应及其 MATLAB 实现的方法&#xff1b; 3、掌握离散时间序列卷积及其 MATLAB 实现的方法&#xff1b; 4、掌握利用 MATLAB 求解微分方程&a…

国内有哪些比较优秀的wordpress主题?

WordPress作为全球最受欢迎的开源内容管理系统之一&#xff0c;拥有众多优质的主题供用户选择。那么国内有哪些比较优秀的wordpress主题呢&#xff1f;下面小编就和大家分享国内功能比较完善比较受欢迎的wordpress主题。 wordpress主题合集&#xff1a;WP主题-办公人导航https:…

力扣1541. 平衡括号字符串的最少插入次数

Problem: 1541. 平衡括号字符串的最少插入次数 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 Problem: 力扣921. 使括号有效的最少添加 类似于上述题目&#xff0c;不过此时一个左括号要和两个右括号配对 1.同理上述题目&#xff0c;遍历字符串时若遇见一个左括…

探索小众爱好:打造个人韧性与特色之路

在这个信息爆炸的时代&#xff0c;我们很容易陷入“千篇一律”的漩涡中&#xff0c;无论是生活方式还是兴趣爱好&#xff0c;似乎都趋向于某种“流行”或“热门”。然而&#xff0c;真正的个性与魅力&#xff0c;往往来源于那些不为大众所知的小众爱好。今天&#xff0c;我想和…

电脑硬盘数据恢复,4个方法,轻松恢复数据

在数字化时代的浪潮中&#xff0c;电脑硬盘不仅是存储数据的仓库&#xff0c;更是我们生活、工作、学习的记忆宫殿。然而&#xff0c;当这个宫殿中的一部分珍贵记忆突然消失&#xff0c;仿佛历史的片段被无情地抹去&#xff0c;我们不禁会感到焦虑和恐慌。此时&#xff0c;电脑…

环球赛乐科技有限公司与北京城市学院共建实习“绿色通道”

环球赛乐&#xff08;北京&#xff09;科技有限公司&#xff08;简称“赛氪网”&#xff09;与北京城市学院近日宣布&#xff0c;双方将合作开通顶岗实习“绿色通道”&#xff0c;旨在为实习生提供高质量的实践机会和就业平台。此次合作不仅体现了校企合作的深度融合&#xff0…

【数据结构】带头双向循环链表的实现及链表顺序表的区别

目录 一、带头双向循环链表接口实现 连接关系&#xff1a; 创建哨兵位&#xff08;表头&#xff09;&#xff1a; 头插——头删&#xff1a; 尾插——尾删&#xff1a; 查找——打印&#xff1a; 指定位置pos前插入&#xff0c;删除pos位置&#xff1a; 链表销毁&#x…

39 - 电影评分(高频 SQL 50 题基础版)

39 - 电影评分 (selectu.name as results fromMovieRating m left join Users u on m.user_idu.user_id GROUP BYm.user_id order by count(*) desc,u.name asc limit 1) union all (selectm1.title as results fromMovieRating m left join Movies m1 on m.movie_idm1.movie…

SQL实现UUIDv7

当我们选择数据库的主键类型时&#xff0c;通常会考虑自增数字或者 UUID。但是这两种类型都有优缺点&#xff0c;自增字段简单有序&#xff0c;性能良好&#xff0c;最大的问题是无法保证全局唯一性&#xff0c;分布式场景受限&#xff1b;UUID 具有全局唯一性&#xff0c;适合…

fastadmin框架修改前端时间戳格式的时区

一、上传文件 将 moment-timezone-with-data.js 和 moment-timezone-with-data.min.js 文件上传到项目的 \public\assets\libs\moment\ 文件夹中。 二、配置中引入文件 在 \public\assets\js\require-backend.js 文件中增加所引入文件的配置: moment-timezone-with-data: …

ITSG、COST-G、Tongji和WHU Level-2数据产品读取绘图(Matlab)

数据介绍&#xff1a; ICGEM International Center for Global Gravity Field Models (gfz-potsdam.de) ITSG 2018&#xff1a;Institute of Geodesy at Graz University of Technolog&#xff08;格拉茨理工大学大地测量研究所&#xff09; 2018版本&#xff0c;最高60阶球谐…

深度之眼(二十六)——神经网络基础知识(一)

文章目录 一、前言二、神经网络与多层感知机2.1 人工神经元2.2 人工神经网络2.3 多层感知机2.4 激活函数 一、前言 看了下课程安排&#xff0c;自己还是没安排好&#xff0c;刚刚捋清了一下思路。 基础&#xff1a;python、数理 认识&#xff1a;神经网络基础、opencv基础、py…

加速科技Flash存储测试解决方案 全面保障数据存储可靠性

Flash存储芯片 现代电子设备的核心数据存储守护者 Flash存储芯片是一种关键的非易失性存储器&#xff0c;作为现代电子设备中不可或缺的核心组件&#xff0c;承载着数据的存取重任。这种小巧而强大的芯片&#xff0c;以其低功耗、可靠性、高速的读写能力和巨大的存储容量&…

C Tips: 举例说明在 Visual C++ 中忽略 C4996 编译警告的几种方法

C4996 编译警告非常常见&#xff0c;经常发生在程序调用了类似于strcpy这样的不够安全的函数时。例如以下代码在 Visual C 的默认工程设置中会引起 C4996 编译警告&#xff1a; void foo() {char filename[MAX_PATH];strcpy(filename, "D:\\Pub\\Test\\1.dat"); }编…