Leetcode Hot100之矩阵

news2024/12/24 21:49:39

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
    

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

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

相关文章

工业液晶屏G065VN01 V2规格书简介

G065VN01 V2 背面实物图 2. 概述 G065VN01 V2 专为 VGA &#xff08;640 x RGB x 480&#xff09; 分辨率和 16.2M&#xff08;RGB 6 位 FRC&#xff09;或 262k 色&#xff08;RGB 6 位&#xff09;的工业显示应用而设计。它由TFT-LCD面板、驱动IC、控制和电源电路板以及包括…

等保相关总结

等级划分准则 等保2.0基本框架 等保2.0变化解读 等级测评 3保1评 分保工作简介 分保工作流程 等保 等保工作流程&#xff1a;定级 -》备案 -》整改 -》测评 -》复核 关保 密评

C++系列-String(三)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” assign 这个接口的目的是用一个新的值代替之前的那个值 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<list> #include&l…

Python自动造波器椭圆曲线波孤子解

&#x1f3af;要点 &#x1f3af;快速傅立叶变换算法周期域解椭圆曲线波 | &#x1f3af;算法数值解孤波脉冲和结果动画 | &#x1f3af;三种语言孤子解浅水表面波方程 | &#x1f3af;渐近分解算法孤子波 | &#x1f3af;自适应步长算法孤子波 | &#x1f3af;流体自动造波器…

react学习——17react中todoList案列

1、项目目录 2、App.js //创建“外壳”组件APP import React, {Component} from "react"; //引入Header组件 import Header from "./components/Header"; //引入List组件 import List from "./components/List"; //引入Footer组件 import Foot…

【unity笔记】八、Unity人物动画介绍

一、效果预览 本内容仅介绍为unity场景中的任务添加简单的动画效果。 二、小试牛刀 2.1 插件准备 在unity 中导入人物模型。常使用的免费人物模型和动画模型有Robot Kyle&#xff0c;Unity-Chan! Model&#xff0c;Basic Motions FREE。 其中Robot Kyle仅支持URP渲染。如…

docker内apt-get update Waiting for headers 0%

问题描述 docker运行debian等容器时&#xff0c;执行apt update或者apt-get update&#xff0c;可能会出现以下错误&#xff1a;root754a91d3630a:/# apt-get update 0% [Waiting for headers] [Waiting for headers] [Connected to developer.download.nvidia.com (152.199.3…

oracle11.2.0.4 RAC 保姆级静默安装(一) GI集群软件

一、响应文件准备 我们直接使用软件解压后的response文件夹中的响应文件模板进行修改 选择当前服务器的主机名,产品目录是在已存在的/u01/app目录基础上自动创建的无需提前创建oraInventory 按需选择语言,具体语言配置参考表格 一般rac默认选择安装类型为CRS_CONFIG 对应正…

Python 基础 (标准库):collections (集合类)

1. 官方文档 collections --- 容器数据类型 — Python 3.12.4 文档 Python 的 collections 模块提供了许多有用的数据类型&#xff08;包括 OrderedDict、Counter、defaultdict、deque 和 namedtuple&#xff09;用于扩展 Python 的标准数据类型。掌握 collections 中的数据类…

一些3D数据集的简单介绍

一、Objaverse 1.0 Objaverse 1.0: a large dataset of objects with 800K (and growing) 3D models with descriptive captions, tags and animations. Assets not only belong to varied categories like animals, humans, and vehicles, but also include interiors and ex…

超越边界:探索深度学习的泛化力量

深度学习的泛化能力 一. 简介1.1 深度学习的定义1.2 什么是泛化能力1.3 深度学习模型的泛化能力1.4 提升深度学习模型的泛化能力 二. 泛化能力的重要性2.1 深度学习中泛化能力的作用2.1.1 防止过拟合2.1.2 处理噪声和不完整数据2.1.3 对于数据分布的变化具有适应性 2.2 泛化能力…

关于服务器的一些知识

1. 云服务器 和 轻量应用服务器 腾讯云中的"云服务器"&#xff08;Cloud Virtual Machine, CVM&#xff09;和"轻量应用服务器"&#xff08;Lite Cloud Server&#xff09;都是提供云端计算资源的服务&#xff0c;但它们在定位、特性和使用场景上存在一些差…

某平台小程序逆向思路整理

一、下载软件 devtools 二、强制打开控制台 根据返回的数据我们得知数据被加密了 找到这个加密的js 发现加密的位置 打断点进入这个加密的方法 之后自定义js。python调用解密即可。

计算机组成原理 | CPU子系统(3)MIPS32指令架构

MIPS32架构指令格式 MIPS32架构寻址方式 指令的编码与功能

第 27 篇 : 搭建maven私服nexus

官网文档 1. 下载应该很慢, 最好是能翻墙 nexus-3.69.0-02-java8-unix.tar.gz 2. 上传到/usr/local/src, 解压及重命名 tar -zxvf nexus-3.69.0-02-java8-unix.tar.gz rm -rf nexus-3.69.0-02-java8-unix.tar.gz mv nexus-3.69.0-02 nexus ls3. 修改配置 cd /usr/local/sr…

AI-智能体基础设施

个性化记忆需要世界模型来协助构建 业界有一个精简的Agent表达公示&#xff0c;即&#xff1a;Agent大模型&#xff08;LLM&#xff09;记忆&#xff08;Memory&#xff09;主动规划&#xff08;Planning&#xff09;工具使用&#xff08;Tool Use&#xff09;。基于该公式&am…

记录正则提取文章

收到了个word版的电子书&#xff0c;需要拆分并转换为md存储到数据库中&#xff0c;便于搜索&#xff0c;记录下用正则提取文章的过程 word原文中有目录&#xff0c;可提取出目录后&#xff0c;在正文中根据目录来正则提取文章 正则的多行匹配 在匹配大量文章的时候&#xff…

Maven高级的多环境配置与应用

多环境配置与应用 这一节中&#xff0c;我们会讲两个内容&#xff0c;分别是多环境开发和跳过测试 5.1 多环境开发 我们平常都是在自己的开发环境进行开发&#xff0c;当开发完成后&#xff0c;需要把开发的功能部署到测试环境供测试人员进行测试使用&#xff0c;等测试人员测…

2024最新谷歌镜像网站入口分享

google谷歌搜索引擎最新可用镜像站列表&#xff1a;&#xff08;注意不要登录账号&#xff0c;镜像站并非谷歌官方网站&#xff09; 谷歌镜像网站1&#xff1a;https://google.cloudnative.love/ 谷歌镜像网站2&#xff1a;https://gsearch.g.shellten.top/ 谷歌镜像网站3&…

七天速通javaSE:第四天 java方法

文章目录 前言一、什么是方法&#xff1f;二、方法的定义与调用1. 方法的定义2. 方法的调用3. 练习&#xff1a;定义比大小方法并调用 三、方法的重载四、递归五、可变参数拓展&#xff1a;命令行传递参数 前言 本章将学习java方法。 一、什么是方法&#xff1f; java方法是用…